LLDB "step in" 和 "finish" 获取标准函数的 return 值

LLDB "step in" and "finish" to get return value of standard functions

有没有办法step进入printf()或atof()等标准函数,然后执行finish回到主程序得到return值?

使用 GDB 我可以这样做:

(gdb) step
14          float di = atof(argv[1]);
(gdb) step
atof (nptr=0x7fffffffe0c6 "5.8") at atof.c:27
27      atof.c: No such file or directory.
(gdb) finish
Run till exit from #0  atof (nptr=0x7fffffffe0c6 "5.8") at 
atof.c:27
0x00005555555547d1 in main (argc=2, argv=0x7fffffffdd18) at 
circumf.c:14
14          float di = atof(argv[1]);
Value returned is  = 5.7999999999999998

但是当我用 LLDB 尝试这个时,它会执行 "over" 所有标准函数。它适用于程序内部的功能,我可以进入的功能,但不适用于标准功能。我想这是一个功能,但有没有办法解决它?我也将 step 与 LLDB 一起使用。

是否有其他方法可以从 LLDB 中的标准函数获取 return 值?

与 gdb 一样,lldb 将单步执行您拥有调试信息的任何函数。它将跳过任何没有调试信息的函数。您所描述的行为差异听起来更像是 lldb 没有have/hasn找不到您的标准库 solibs 的调试信息。