gdb这个调试工具怎么使用,在于相关的命令的使用(break、watch、print、continue、next、step等),
gdb如何调试,需要结合程序的设计,代码的逻辑,多实践总结。
这里解释两个在实践中遇到的令初学者费解的问题:
1)为啥设置了断点 b write_pipe,gdb调试中,在断点处没有停下?
设想下面的情况,一个进程在后台运行过程中CPU占有率140%,gdb挂上去查看是什么情况。
gdb program pid(进程的ID)
通过bt查看忙碌的线程的调用栈,发现其一直在忙write_pipe,通过b write_pipe设置断点,再continue跑起来,
发现程序没有在write_pipe处停下。
这种情况,一般是程序员在程序运行后,有修改了代码重新进行了编译,符号的地址与原来发生了错位,就是说
断点设置到另外的代码上了。
2)gdb用bt显示调用栈的信息,显示??,可能是什么原因?
Figure -- 1
这个现象,在上面调试coredump文件时经常会发生,调用栈#3 #2 #1对应的地址无法对应具体的函数。
原因是,1)产生coredump的程序,与当前调试时的程序,是不同的版本,调试信息&符号表都错位了。
2)调用栈溢出(这个没有确认过)。3)gdb corefile使用不当,调试corefile需要程序,gdb program corefile。