GDB 和核心转储问题
GDB and trouble with core dumps
认识我的
$ 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's default behavior is to generate core dumps for all processes in /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 压缩核心文件时表现得应该如此。如果 Craig 愿意 post 提供类似的解决方案,我很乐意给他那个大大的复选标记。
最简单的解决方案是通过名为 coredumpctl
的子程序以及崩溃程序的 PID 来启动 gdb,a la
$coredumpctl gdb *PID HERE*
这让我很烦恼,Arch,我可能会因此迁移到 Gentoo。
我已经解决了这个特殊问题,这在很大程度上要感谢 WhozCraig,他建议 GDB 在被强制输入 LZ4 压缩核心文件时表现得应该如此。 如果 Craig 愿意 post 提供类似的解决方案,我很乐意给他那个大大的复选标记 我把所有的功劳都归功于他, 尽管。哇哈哈哈!
最简单的solution 是通过一个名为 coredumpctl 的子程序以及崩溃程序的 PID la
启动 gdb
$coredumpctl gdb PID 在这里
这让我很烦恼,Arch,我可能会因此迁移到 Gentoo。
我和你的目的一样。只需通过 lz4
命令解压 lz4 文件,然后您可以通过 gdb crashed_C_executable_file uncompressed_coredump_file
进行调试
认识我的
$ 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's default behavior is to generate core dumps for all processes in /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 压缩核心文件时表现得应该如此。如果 Craig 愿意 post 提供类似的解决方案,我很乐意给他那个大大的复选标记。
最简单的解决方案是通过名为 coredumpctl
的子程序以及崩溃程序的 PID 来启动 gdb,a la
$coredumpctl gdb *PID HERE*
这让我很烦恼,Arch,我可能会因此迁移到 Gentoo。
我已经解决了这个特殊问题,这在很大程度上要感谢 WhozCraig,他建议 GDB 在被强制输入 LZ4 压缩核心文件时表现得应该如此。 如果 Craig 愿意 post 提供类似的解决方案,我很乐意给他那个大大的复选标记 我把所有的功劳都归功于他, 尽管。哇哈哈哈!
最简单的solution 是通过一个名为 coredumpctl 的子程序以及崩溃程序的 PID la
启动 gdb$coredumpctl gdb PID 在这里
这让我很烦恼,Arch,我可能会因此迁移到 Gentoo。
我和你的目的一样。只需通过 lz4
命令解压 lz4 文件,然后您可以通过 gdb crashed_C_executable_file uncompressed_coredump_file