gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:38 25 4
gpt4 key购买 nike

这是在 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>

我确实得到了可用的回溯。

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

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

最佳答案

Is there anyway I can do this in command line.

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

My main interest is why does gdb behaves differently.

不是。

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

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

After all, gdb does know the path to executable

不,它没有。

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

  • 它可以记录相对路径,例如./a.out 并且绝对不能保证您的当前目录在 GDB 分析时与调用可执行文件时的目录相同,并且
  • elf_prpsinfo.pr_fname[] 中只有 16 个字符的空间,超过该长度的任何内容都将被截断。

关于linux - 核心文件和核心文件之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com