【问题标题】:Core dump file analysis [duplicate]核心转储文件分析[重复]
【发布时间】:2011-07-04 04:33:54
【问题描述】:

在分析核心转储文件时,我需要检查哪些内容?

请从头告诉我。

【问题讨论】:

标签: gdb coredump


【解决方案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 描述命令行选项

  1. 首先找到生成corefile的目录。

  2. 然后在目录下使用ls -ltr命令找到最新生成的corefile。

  3. 要加载核心文件,请使用

    gdb binary path of corefile
    

    这将加载核心文件。

  4. 然后你可以使用bt命令获取信息。

    如需详细回溯,请使用bt full

  5. 要打印变量,请使用print variable-namep variable-name

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

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

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

  9. 要停止 GDB,请使用 quitq

【讨论】:

  • 1- 首先找到生成corefile的目录。这个怎么定位,找不到位置。谢谢
  • 你说的“没有调试文件”是什么意思
  • 这是一个很好的解释,但你能解释一下我们如何分析核心转储(从不可调试的二进制文件生成)吗?
  • 我在这里学到了bt full ;)
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多