【发布时间】:2011-07-04 04:33:54
【问题描述】:
在分析核心转储文件时,我需要检查哪些内容?
请从头告诉我。
【问题讨论】:
-
你能描述一下你的问题是什么。什么命令给麻烦了?也许参考文档中的章节:sourceware.org/gdb/download/onlinedocs/gdb/index.html
在分析核心转储文件时,我需要检查哪些内容?
请从头告诉我。
【问题讨论】:
您只需要一个与生成核心转储文件的二进制文件相同的二进制文件(包括调试符号)。然后你可以运行gdb path/to/the/binary path/to/the/core/dump/file来调试它。
当它启动时,您可以使用bt(用于回溯)从崩溃时获取堆栈跟踪。在回溯中,每个函数调用都有一个编号。您可以使用frame <i>number</i>(将 number 替换为堆栈跟踪中的相应编号)来选择特定的堆栈帧。
然后您可以使用list 查看该函数周围的代码,并使用info locals 查看局部变量。您也可以使用print <i>name_of_variable</i>(将“name_of_variable”替换为变量名)查看其值。
在 GDB 中输入 help 会提示您查看其他命令。
【讨论】:
-g 标志编译,但 path/to/the/binary 是相同版本的应用程序,但带有 -g 标志,是否可以运行 gdb path/to/the/binary path/to/the/core?
bt 命令,但它显示no stack。核心文件很大 (ulimit -c unlimited)。我可能会错过什么?
strings 命令调查我需要调试哪个二进制文件吗?
file core.86234,它会说明使用了哪个命令。
一些通用帮助:
gdb 启动 GDB,没有调试文件
gdb 程序开始调试程序
gdb程序核心调试程序产生的coredump核心
gdb --help 描述命令行选项
首先找到生成corefile的目录。
然后在目录下使用ls -ltr命令找到最新生成的corefile。
要加载核心文件,请使用
gdb binary path of corefile
这将加载核心文件。
然后你可以使用bt命令获取信息。
如需详细回溯,请使用bt full。
要打印变量,请使用print variable-name 或p variable-name
要获得有关 GDB 的任何帮助,请使用 help 选项或使用 apropos search-topic
使用frame frame-number 转到所需的帧号。
使用up n和down n命令分别选择上n帧和下n帧。
要停止 GDB,请使用 quit 或 q。
【讨论】:
bt full ;)