gcc - 如何在 AddressSanitizer 错误时生成核心转储

标签 gcc coredump address-sanitizer sanitizer

我这样编译代码来启用 Asan:

g++ -O0 -g -fsanitize=address -fno-omit-frame-pointer

但它永远不会生成核心转储,以便我稍后可以检查错误的详细信息。我怎样才能生成它?

最佳答案

您需要设置环境变量来请求核心转储

export ASAN_OPTIONS=abort_on_error=1

这确实应该是默认值,但由于历史原因,ASan 只是以非零错误代码退出。

在 64 位系统上,您可能需要添加

export ASAN_OPTIONS=abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1

(默认情况下禁用核心转储,担心它们太大)。

有关标志的完整列表,您可以查看 Asan wiki .

关于gcc - 如何在 AddressSanitizer 错误时生成核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42851670/

相关文章:

将非指针变量转换为指向数组的指针

c++ - C++ 中的条件运算符还能为我做什么?

无法在 C 程序中打开 16 个文件(核心转储)

gcc - valgrind、gcc 6.2.0 和 "-fsanitize=address"

c - 使用 Address Sanitizer 替代 Valgrind

macos - 在 OSX 上构建 ffmpeg

c - 是否可以在链接期间触发#warning?

进程的 GDB 完整内存转储

c - 尝试为 Struct 创建内存时在 C 中转储的段错误核心

c - 如何使用 clang 的 -fsanitize=address 在调试输出中获取行号?