分析核心转储

时间:2010-06-28 17:11:52

标签: c++

我们有一个生成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命令,以查找每个堆栈框架内的数据,问题可能是什么,失败的地方,其他调试方法(如果有的话)?

1 个答案:

答案 0 :(得分:0)

您可以在gdb中使用帮助。导航堆栈:帮助堆栈

导航堆栈的主要有用命令是上下。如果您手头有调试符号,则可以使用列表查看您的位置。然后要获取信息,您需要print(缩写为'p')。例如,如果你有一个名为myInt的int,那么你只需输入p myInt即可。没有调试信息就更难了。从你的堆栈框架看来问题出现在f5()中。你可以做的一件事是在gdb中启动你的程序。它将在segfault发生的地方停止。当您提供有关段错误的代码部分的提示时,您可以使用调试选项编译此代码单元。

基础知识。如果您需要更多帮助,请告诉我们更多信息。

MY2C