核心转储文件分析[重复]
Posted
技术标签:
【中文标题】核心转储文件分析[重复]【英文标题】:Core dump file analysis [duplicate] 【发布时间】:2011-07-04 04:33:54 【问题描述】:在分析核心转储文件时,我需要检查哪些内容?
请从头告诉我。
【问题讨论】:
你能描述一下你的问题是什么。什么命令给麻烦了?也许参考文档中的章节:sourceware.org/gdb/download/onlinedocs/gdb/index.html 【参考方案1】:您只需要一个与生成核心转储文件的二进制文件相同的二进制文件(包括调试符号)。然后你可以运行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
会提示您查看其他命令。
【讨论】:
如果 coredumped 应用程序未使用-g
标志编译,但 path/to/the/binary
是相同版本的应用程序,但带有 -g 标志,是否可以运行 gdb path/to/the/binary path/to/the/core
?
我尝试了bt
命令,但它显示no stack
。核心文件很大 (ulimit -c unlimited
)。我可能会错过什么?
@EOL,您可能错过了作为第一个参数的二进制文件,并且只提供了核心转储文件。
如果我没有胶水,什么二进制文件产生了核心转储怎么办?我可以使用strings
命令调查我需要调试哪个二进制文件吗?
哦,我可以运行file core.86234
,它会说明使用了哪个命令。【参考方案2】:
使用 GDB 调试 coredump 的步骤:
一些通用帮助:
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
。
【讨论】:
1- 首先找到生成corefile的目录。这个怎么定位,找不到位置。谢谢 参考这些 URL 获取核心转储位置:unix.stackexchange.com/questions/192716/…***.com/questions/2065912/… 你说的“没有调试文件”是什么意思? 这是一个很好的解释,但你能解释一下我们如何分析核心转储(从不可调试的二进制文件生成)吗? 我在这里学到了bt full
;)以上是关于核心转储文件分析[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C++中char指针中的memset的分段错误(核心转储)[重复]