核心转储文件分析

Dew*_*Dew 213 gdb coredump

在分析核心转储文件时,我需要检查的所有内容是什么?请从头开始告诉我.

Mic*_*yan 314

您只需要一个与生成核心的二进制文件相同的二进制文件(包含调试符号).然后你可以运行gdb path/to/the/binary path/to/the/core来调试它.

启动时,您可以使用bt(用于回溯)从崩溃时获取堆栈跟踪.在回溯中,每个函数调用都给出一个数字.您可以使用(用堆栈跟踪中的相应数字替换数字)来选择特定的堆栈帧.然后,您可以使用该函数查看代码,并查看局部变量.您还可以使用(用变量名替换"name_of_variable")来查看其值.frame numberlistinfo localsprint name_of_variable

help在GDB中输入会给你一个提示,让你看到其他命令.

  • 哦,我可以运行`file core.86234`并说明使用了哪个命令. (18认同)
  • @EOL,您可能错过了二进制文件作为第一个参数,并且只提供了coredump文件. (8认同)
  • 当coredumped app没有使用`-g`标志编译时,可以运行`gdb path/to// path path/to/the/core`,但`path/to/the/binary`是相同版本的应用程序,但是用-g标志? (4认同)
  • 我尝试了bt命令,但是它说没有堆栈。核心文件很大(`ulimit -c unlimited`)。我可能会缺少什么? (2认同)
  • 如果我没有胶水什么二进制产生核心转储怎么办?我可以使用`strings`命令调查哪个二进制文件需要调试它? (2认同)

May*_*ank 88

使用gdb调试coredump的步骤:

一些通用的帮助:

gdb启动GDB,没有调试文件

gdb程序开始调试程序

gdb程序核心调试程序生成的coredump核心

gdb --help描述命令行选项

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

2-然后使用ls -ltr目录中的命令查找最新生成的corefile.

3-加载corefile使用

核心文件的gdb二进制路径

这将加载核心文件.

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.

  • 我在这里学到了“bt full”;) (5认同)
  • *“没有调试文件”*是什么意思? (2认同)