2010-06-28 215 views
0

我们有一个生成核心转储的二进制文件。所以我运行了gdb命令来分析问题。请注意,二进制和代码位于两个不同的位置,我们不能使用调试符号来构建整个二进制文件。因此,如何和我可以从下面backtarce查找细节:分析核心转储

gdb的二进制核心文件

(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

开始gdb'知道你能“的问题” ...... – ShinTakezou 2010-06-28 17:14:20

+0

你运行在Linux发行版的二进制命令?如果这样'valgrind'可能会给你一些不容易通过gdb分析的附加信息。 – Void 2010-06-28 17:52:02

+0

我尝试了很多gdb命令,但徒劳无功。我们没有在我们的盒子中部署valgrind命令 我可以调试有关代码的问题的gdbs命令是什么? – Prakash 2010-06-28 18:28:44

回答

0

您可以在gdb中使用帮助。浏览堆栈:帮助栈

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

基本知识。告诉我们更多你是否需要更多帮助。

MY2C从'信息