在
Linux和Mac OS X中,我可以使用stepi和nexti调试应用程序,而无需调试信息.
在Mac OS X上,gdb显示了在库中调用的函数,尽管有时在每个stepi指令中提前执行几个汇编器指令.
在Linux上,当我进入一个动态库gdb失去了.例如,puts()在puts()中有三个汇编指令,一旦gdb到达0x080482bf的跳转,就会失败,并显示“No function contains program counter for selected frame”.
0x080482ba in puts@plt ()
(gdb) disassemble
Dump of assembler code for function puts@plt:
0x080482b4 : jmp *0x8049580
0x080482ba : push $0x10
0x080482bf : jmp 0x8048284 <_init>
End of assembler dump.
(gdb) stepi
0x080482bf in puts@plt ()
(gdb) stepi
0x08048284 in ?? ()
(gdb) disassemble
No function contains program counter for selected frame.
你知道如何使用gdb调试这些库调用.
本文探讨了在Linux和MacOSX环境下使用GDB调试器时遇到的问题,特别是在不需要调试信息的情况下跟踪应用程序进入动态库的情况.文章详细描述了一个具体的案例,即在跟踪puts()函数时,GDB在遇到特定汇编指令时失去位置信息.此外,还讨论了解决此类问题的一般方法.
2456

被折叠的 条评论
为什么被折叠?



