Gdb 核心转储文件分析

Gdb 核心转储文件分析,gdb,coredump,Gdb,Coredump,在分析核心转储文件时,我需要检查哪些内容 请从头开始告诉我。您只需要一个与生成核心转储文件的二进制文件相同的二进制文件(包括调试符号)。然后可以运行gdb path/to/the/binary path/to/the/core/dump/file对其进行调试 当它启动时,您可以使用bt(用于回溯)获取崩溃时的堆栈跟踪。在回溯中,每个函数调用都有一个数字。您可以使用帧编号(将编号替换为堆栈跟踪中的相应编号)来选择特定堆栈帧 然后,您可以使用list查看该函数周围的代码,并使用info locals

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

请从头开始告诉我。

您只需要一个与生成核心转储文件的二进制文件相同的二进制文件(包括调试符号)。然后可以运行
gdb path/to/the/binary path/to/the/core/dump/file
对其进行调试

当它启动时,您可以使用
bt
(用于回溯)获取崩溃时的堆栈跟踪。在回溯中,每个函数调用都有一个数字。您可以使用
帧编号
(将编号替换为堆栈跟踪中的相应编号)来选择特定堆栈帧

然后,您可以使用
list
查看该函数周围的代码,并使用
info locals
查看局部变量。您还可以使用
打印变量的名称(将“变量的名称”替换为变量名称)查看其值

在GDB中键入
help
将提示您查看其他命令。

使用GDB调试coredump的步骤: 一些通用帮助:

gdb启动gdb,无调试les

gdb程序开始调试程序

gdb程序核心调试程序生成的核心转储核心

gdb——帮助描述命令行选项

  • 首先,找到生成corefile的目录

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

  • 要加载corefile,请使用

    gdb binary path of corefile
    
    这将加载corefile

  • 然后您可以使用
    bt
    命令获取信息

    详细的回溯使用
    bt-full

  • 要打印变量,请使用
    print variable name
    p variable name

  • 要获得有关GDB的任何帮助,请使用
    help
    选项或使用
    apropos搜索主题

  • 使用
    帧编号
    转到所需的帧编号

  • 使用
    up n
    down n
    命令分别选择第n帧向上和第n帧向下

  • 要停止GDB,请使用
    quit
    q


  • 你能描述一下你的问题是什么吗。什么命令惹麻烦?可能参考文档中的章节:当coredumped应用程序没有使用
    -g
    标志编译时,可以运行
    gdb path/to/the/binary path/to/the/core
    ,但是
    path/to/the/binary
    是同一版本的应用程序,但是使用-g标志?我尝试了
    bt
    命令,但它说
    没有堆栈
    。核心文件很大(
    ulimit-c unlimited
    )。我可能遗漏了什么?@EOL,您可能遗漏了作为第一个参数的二进制文件,并且只提供了coredump文件。如果我没有胶水,那么哪个二进制文件产生了核心转储呢?我可以用
    strings
    命令调查需要调试哪个二进制文件吗?哦,我可以运行
    file core.86234
    并说明使用了哪个命令。1-首先找到生成corefile的目录。如何定位此,无法找到位置。感谢为核心转储位置提供这些URL:“没有调试les”是什么意思?这是一个很好的解释,但您能解释一下我们如何分析核心转储(由非可调试二进制文件生成)吗?我在这里学到了
    bt full