linux - Linux 中的核心转储

标签 linux gcc crash crash-dumps coredump

我想在我的进程崩溃时创建一个核心转储。目前我正在遵循这种方法:

  1. 使用 gcc/g++ 的“-g”构建程序的特殊“调试”版本。
  2. 执行“ulimit -c unlimited”
  3. 现在,只要程序崩溃,我们就会得到核心转储。

但我想尽量减少步骤数,以便:

  • 核心转储应该总是被创建。即使它是“发布”构建。不应要求用户手动执行命令“ulimit -c unlimited”。
  • 那个核心转储的回溯应该能够给出调用的文件、函数、行号。这是一种人类可读形式的堆栈跟踪。
  • 我不想使用“-g”将程序构建为调试版本。或者至少它不应该包含任何其他不需要生成人类可读堆栈跟踪的调试信息。因为这将是该程序的发布版本。

所以我有两个问题:

  1. 如何在程序的“发布”版本中创建核心转储?
  2. 总是。无需手动执行“ulimit -c unlimited

最佳答案

  • 关于核心限制,您可以通过调用 setrlimit 在 C 中自己完成.
  • 在 GNU (glibc) 或 BSD 系统上,您可以通过调用 backtrace 获得回溯。以及相关的系统调用。然后,您必须通过运行 addr2line(或复制其功能)将函数地址转换为函数名称。
  • 只是不要使用-g,你仍然可以获得回溯(除了内联函数不会出现)。

关于linux - Linux 中的核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251391/

相关文章:

linux - 在 Suse 企业版上安装 gcc-fortran

javascript - 为什么这个 Javascript match() 函数会使我的浏览器崩溃?

ios - Swift - 执行 Segue 时的 fatal error

Linux 环境变量已定义但未反射(reflect)值

c - 使用 GCC 编译 C 项目时使用了哪些默认库

c++ - 内联成员函数使用的静态全局变量

java - 启动应用程序时 AdMob 崩溃

c++ - 检查是否至少有一个 Wayland session 正在运行

linux - 使用 -lnag 链接到 NAG 库

linux - 谁在 Linux 中调用 calloc() 时清零页面?