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 的调试信息。
有没有办法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 的调试信息。