c - GDB 和核心转储问题

标签 c linux gdb coredump

认识我的

$ uname -a
Linux hostmachine 4.1.2-2-ARCH #1 SMP PREEMPT Wed Jul 15 08:30:32 UTC 2015 x86_64 GNU/Linux

我正在尝试学习如何使用 GDB 调试 C 程序。我认为,如果我可以使用 GDB 找出导致段错误的错误,那将特别出色。我有一个小程序,作为 K&R 练习 1-13 的解决方案而编写,给定一个特定大小的输入字符串,它将生成一个段错误:

$ ~/learning_c/KR_exercises/chapter_1/1.13.x`

--我提供了一个来自标准输入的字符串,并且...--

Segmentation fault (core dumped)

根据Arch wiki , "Systemd 的默认行为是为 /var/lib/systemd/coredump/ 中的所有进程生成核心转储。"

奥基杜克:

$ls /var/lib/systemd/coredump/core.1\x2e13\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4

但是当我运行时:

$ gdb -q ~/learning_c/KR_exercises/chapter_1/1.13.x /var/lib/systemd/coredump/core.1\\x2e13\\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4

我得到:

Reading symbols from /home/dean/learning_c/KR_exercises/chapter_1/1.13.x...done.
"/var/lib/systemd/coredump/core.1\x2e13\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4" is not a core dump: File format not recognized

尝试通过将 GDB 附加到进程来生成核心转储 as detailed here只让我的终端模拟器开始捕获控制字符(^D^C^Z 在附加 GDB 后将无法在模拟器中工作) ,并且如果在附加 GDB 后发生段错误,则不会在 shell 中报告它。

帮助我理解,哦,Stack Overflow 仁慈仁慈的领主们!

附录:

我已经解决了这个特殊问题,这在很大程度上要感谢 WhozCraig,他建议 GDB 在被强制输入 lz4 压缩核心文件时表现得像它应该表现的那样。如果克雷格好心地发布一个解决方案,说类似的话,我很乐意给他那个大大的“ol”复选标记。

最简单的解决方案是通过名为 coredumpctl 的子程序以及崩溃程序的 PID 来启动 gdb,a la

$coredumpctl gdb *PID HERE*

这让我很烦恼,Arch,我可能会因此迁移到 Gentoo。

最佳答案

我已经解决了这个特殊问题,这在很大程度上要感谢 WhozCraig,他建议 GDB 在被强制输入 LZ4 压缩核心文件时表现得像它应该表现的那样。 如果 Craig 愿意发布一个解决方案,说类似的话,我会很乐意给他那个大大的“ol”复选标记 不过,我会把所有的功劳都归功于他。哇哈哈哈!

最简单的solution是通过名为 coredumpctl 的子程序以及崩溃程序的 PID 启动 gdb,a la

$coredumpctl gdb PID 在这里

这让我很烦恼,Arch,我可能会因此迁移到 Gentoo

关于c - GDB 和核心转储问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31795901/

相关文章:

C 程序输出错误

c - 使用 fgets 获取垃圾读取文件

linux - 在 crontab 中通过脚本打开 JPG 文件

linux - teamviz安装错误 "error: libjpeg.so.62"

linux - 将使用 "-g"编译的二进制文件与没有 "-g"的库链接

python - 使用命名管道根据输出将输入发送到程序

c - TCP : Socket send/recv order

c - 在 64 位机器上运行 C 代码时,glibc 损坏了双链表错误

linux - Bash 脚本读取文件并根据特定字符串运行命令

c - 如何在没有共享库的情况下挂接 gdb pretty-print ?