当我使用GDB时,有些情况下GDB告诉我代码断了什么行,有时候它没有说出一些我不理解的一般错误之外的事情。
有没有办法看到程序崩溃前执行的最后一行代码?例如,如果第50行导致seg故障或程序中断,GDB是否有办法自动显示第49行?
答案 0 :(得分:2)
例如,如果第50行导致seg错误或程序中断,GDB是否有办法自动显示第49行?
当您在第50行获得SIGSEGV
时,GDB将停止。如果你使用list
命令,它会在第50行显示一个窗口,其中还包括第49行。
但请注意,绝对不能保证在第50行之前执行的最后一行是第49行。
答案 1 :(得分:2)
您可以在出现错误之前使用list
来显示行。
如果是分段错误,有时您需要在帧堆栈中找到正确的帧。
您使用backtrace
或bt
查找您所在的框架,然后使用up
和down
移动。
库代码中的一个框架不包含GDB的有用符号表来指示您的错误,并且大多数错误都发生在您编写的代码中,而不是标准库代码。
一旦得到正确的框架,就会在出错之前列出相应的代码。