核心和核心文件之间的区别

时间:2014-03-04 18:41:51

标签: linux ubuntu gdb core

这是在Ubuntu 12.04,GDB版本GNU gdb(Ubuntu / Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04

我工作的应用程序,比我关心的更多次转储核心。当我按照以下方式启动gdb时,我没有得到任何可用的回溯。

gdb --core <path to core dump>

GDB确实显示了导致核心转储以及命令行参数的完整进程路径。

在gdb提示符下,如果我执行命令

file <path to executable>
core-file <path to core dump>

我确实可以回溯。

从gdb提示符执行的--core命令行选项和core-file命令之间有什么区别。

无论如何我可以在命令行中执行此操作。毕竟,gdb确实知道可执行文件和核心文件名的路径。

1 个答案:

答案 0 :(得分:3)

  

无论如何,我可以在命令行中执行此操作。

是:gdb /path/to/exe /path/to/core

  

我的主要兴趣是为什么gdb表现不同。

它没有。

为了节省磁盘空间,大多数UNIX系统不会将文件支持的只读页面(例如程序代码)转储到核心文件中 - 该代码已经在磁盘上了,那么为什么要再次编写它? (这实际上是可配置的:请参阅man corecoredump_filter)。

但是这些只读页面包含符号(您在nmbacktrace输出中看到的内容),所以如果您不告诉GDB可执行文件在哪里,那么它可以& #39; t产生有意义的backtrace

  

毕竟,gdb确实知道可执行文件的路径

不,它没有。

内核记录有关生成核心的可执行文件的不完整信息。该信息不可靠:

  • 它可以记录相对路径,例如./a.out并且绝对无法保证当前目录在GDB分析时与调用可执行文件时的目录相同,并且
  • elf_prpsinfo.pr_fname[]中只有16个字符的空格,任何比这更长的字符都会被截断。