核心转储文件分析[重复]

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-namep variable-name

    要获得有关 GDB 的任何帮助,请使用 help 选项或使用 apropos search-topic

    使用frame frame-number 转到所需的帧号。

    使用up ndown n命令分别选择上n帧和下n帧。

    要停止 GDB,请使用 quitq

【讨论】:

1- 首先找到生成corefile的目录。这个怎么定位,找不到位置。谢谢 参考这些 URL 获取核心转储位置:unix.stackexchange.com/questions/192716/…***.com/questions/2065912/… 你说的“没有调试文件”是什么意思 这是一个很好的解释,但你能解释一下我们如何分析核心转储(从不可调试的二进制文件生成)吗? 我在这里学到了bt full ;)

以上是关于核心转储文件分析[重复]的主要内容,如果未能解决你的问题,请参考以下文章

strtok导致核心转储[重复]

尝试声明大数组时出现分段错误和核心转储[重复]

分段错误(核心转储)C++,因为我使用了大量内存 [重复]

C++中char指针中的memset的分段错误(核心转储)[重复]

分析线程转储 - sun.misc.Unsafe.park 上的许多阻塞线程 [重复]

如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?