我的程序是这样运行的:

exe -p param1 -i param2 -o param3

它崩溃并生成了一个核心转储文件core.pid。

我想分析一下核心转储文件

gdb ./exe -p param1 -i param2 -o param3 core.pid

但是GDB将EXE文件的参数识别为GDB的输入。

在这种情况下,我如何分析核心转储文件?


当前回答

简单使用GDB,调试coredump文件:

gdb <executable_path> <coredump_file_path>

“进程”的coredump文件被创建为“核心”。pid”文件。

在你进入GDB提示符后(在执行上面的命令时),输入:

...
(gdb) where

这将为您提供堆栈的信息,在那里您可以分析崩溃/错误的原因。 其他命令,出于同样的目的是:

...
(gdb) bt full

这和上面一样。按照惯例,它列出了整个堆栈信息(最终导致崩溃的位置)。

其他回答

简单使用GDB,调试coredump文件:

gdb <executable_path> <coredump_file_path>

“进程”的coredump文件被创建为“核心”。pid”文件。

在你进入GDB提示符后(在执行上面的命令时),输入:

...
(gdb) where

这将为您提供堆栈的信息,在那里您可以分析崩溃/错误的原因。 其他命令,出于同样的目的是:

...
(gdb) bt full

这和上面一样。按照惯例,它列出了整个堆栈信息(最终导致崩溃的位置)。

跳过参数即可。广发银行不需要他们:

gdb ./exe core.pid

我只使用coredumpctl调试(在Fedora 32上),它为我提供了一个GDB控制台来调试我最近的核心转储。

只需键入命令:

$ gdb <Binary> <codeDump>

Or

$ gdb <binary>

$ gdb) core <coreDump>

不需要提供任何命令行参数。由于前面的练习而生成的代码转储。

稍微不同的方法将允许您完全跳过GDB。如果您想要的只是反向跟踪,linux特定的实用程序'catchsegv'将捕获SIGSEGV并显示反向跟踪。