首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心文件和核心文件的区别

核心文件和核心文件的区别
EN

Stack Overflow用户
提问于 2014-03-04 18:41:51
回答 1查看 420关注 0票数 2

这是在Ubuntu12.04上,GDB版本GNU gdb ( Ubuntu /Linaro7.4-2012.04-0ubuntu2.1) 7.4-2012.04

我所使用的应用程序,比我关心的要多转储核心。当我按如下方式启动gdb时,我无法得到任何可用的回溯。

代码语言:javascript
复制
gdb --core <path to core dump>

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

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

代码语言:javascript
复制
file <path to executable>
core-file <path to core dump>

我确实有可用的回溯。

-core命令行选项与从gdb提示符执行的核心文件命令有什么区别?

不管怎么说,我可以在命令行中这样做。毕竟,gdb确实知道可执行文件名和核心文件名的路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 02:51:00

不管怎么说,我可以在命令行中这样做。

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

我主要感兴趣的是为什么gdb的行为会有所不同。

事实并非如此。

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

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

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

不,不需要。

内核记录产生核心的可执行文件的不完整信息。这一信息不可靠:

  • 它可以记录相对路径,例如./a.out,而且绝对不能保证当前目录在GDB分析时与调用可执行文件时相同,并且
  • elf_prpsinfo.pr_fname[]中只有16个字符的空间,超过这一点的任何字符都将被截断。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22180257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档