c++ - 在 Linux 上从 coredump 中发现崩溃

标签 c++ c linux crash

我找到了一个有用的主题,用于查找导致 Window 上的核心转储文件崩溃的代码行 (http://www.codeproject.com/Articles/3472/Finding-crash-information-using-the-MAP-file)。但我找不到 Linux 的类似主题。有时我在测试系统上有 coredump 但由于缺少调试信息我无法分析它们。我无法复制这个崩溃,所以我无法调试它们。 Gdb stacktrace 显示堆栈如下:

#0  0x00a2b430 in __kernel_vsyscall ()
#1  0x01522b11 in raise () from /lib/libc.so.6
#2  0x015243ea in abort () from /lib/libc.so.6
#3  0x08126e9f in ?? ()
#4  0x081276a8 in ?? ()
#5 0x0808b6fb in main ()

所以我想有一个类似的主题,即从 Linux 上的 coredump 中查找崩溃信息,就像上面的 Window 主题一样。你能帮忙想出任何解决方案或相关主题吗?

最佳答案

通常可以使用与“旧”编译器标志完全相同的一组 C 编译器标志重新编译程序,只需添加 -g 来添加调试信息,然后将此可执行文件与生成的核心转储一起加载到调试器中。

但是,重要的是不要更改源代码中的任何内容或更改任何编译器标志,因为这会导致生成与核心转储不匹配的不同代码。唯一可以更改的标志是 -g,它添加了调试信息。

关于c++ - 在 Linux 上从 coredump 中发现崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163342/

相关文章:

c++ - 如何检测图的边列表表示中的循环?

c - 使用 fscanf() 读取 unsigned long long

linux - DHCP 的实际完整形式是什么? C代表什么控制或配置

c++ - Valgrind 在不应该的时候报告竞争条件

c - wait_event_timeout 的解释

linux - 设置文件所有者 :group in Linux using Qt/C++

c++ - 我怎样才能并行化一个for使用boost?

c++ - 如何创建特殊词

c++ - 在单编写器多阅读器情况下,是否需要为uint64_t锁定?

使用 poll() 时正确处理 Ctrl-C