我们有一个生成coredump的二进制文件。所以我运行gdb命令来分析问题。请注意二进制文件和代码位于两个不同的位置,我们无法使用调试符号构建整个二进制文件。因此,我可以从下面的backtarce中找到如何以及具体细节:
gdb binary corefile
(gdb) where
#0 0x101fa37a in f1()
#1 0x10203812 in operator f2< ()
#2 0x085f6244 in f3 ()
#3 0x085f1574 in f4()
#4 0x0805b27b in sigsegv_handler ()
#5 <signal handler called>
#6 0x1018d945 in f5()
#7 0x1018e021 in f6()
..................................
#29 0x08055c5c in main ()
(gdb)
请提供我可以发出的gdb命令,以查找每个堆栈框架内的数据,问题可能是什么,失败的地方,其他调试方法(如果有的话)?
答案 0 :(得分:0)
您可以在gdb中使用帮助。导航堆栈:帮助堆栈
导航堆栈的主要有用命令是上下。如果您手头有调试符号,则可以使用列表查看您的位置。然后要获取信息,您需要print(缩写为'p')。例如,如果你有一个名为myInt的int,那么你只需输入p myInt
即可。没有调试信息就更难了。从你的堆栈框架看来问题出现在f5()中。你可以做的一件事是在gdb中启动你的程序。它将在segfault发生的地方停止。当您提供有关段错误的代码部分的提示时,您可以使用调试选项编译此代码单元。
基础知识。如果您需要更多帮助,请告诉我们更多信息。
MY2C