这是在Ubuntu12.04上,GDB版本GNU gdb ( Ubuntu /Linaro7.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>我确实有可用的回溯。
-core命令行选项与从gdb提示符执行的核心文件命令有什么区别?
不管怎么说,我可以在命令行中这样做。毕竟,gdb确实知道可执行文件名和核心文件名的路径。
发布于 2014-03-05 02:51:00
不管怎么说,我可以在命令行中这样做。
是:gdb /path/to/exe /path/to/core
我主要感兴趣的是为什么gdb的行为会有所不同。
事实并非如此。
大多数UNIX系统,为了节省磁盘空间,不将文件支持的只读页(如程序代码)转储到核心文件--该代码已经在磁盘上了,那么为什么还要再写一次呢?(这实际上是可配置的:参见man core和coredump_filter)。
但是这些只读页面包含符号(您在nm和backtrace输出中看到的),所以如果不告诉GDB可执行文件在哪里,那么它就不能生成有意义的backtrace。
毕竟,gdb确实知道可执行文件的路径。
不,不需要。
内核记录产生核心的可执行文件的不完整信息。这一信息不可靠:
./a.out,而且绝对不能保证当前目录在GDB分析时与调用可执行文件时相同,并且elf_prpsinfo.pr_fname[]中只有16个字符的空间,超过这一点的任何字符都将被截断。https://stackoverflow.com/questions/22180257
复制相似问题