如何在AddressSanitizer错误时生成核心转储文件

14

我按照以下方式编译我的代码以启用Asan:

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

但它从不生成核心转储,以便我可以随后检查错误的详细信息。我该如何生成它?

1个回答

32

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

export ASAN_OPTIONS=abort_on_error=1

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

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

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

为了防止coredump过大,默认情况下禁用了它们。

有关所有标志的完整列表,请参见Asan wiki


3
这是我在网络上找到正确答案的唯一位置,适用于我64位系统。谢谢! - the_endian
@the_endian 谢谢。确实很遗憾看到使用Asan如此困难。一些复杂性是合理的(Asan必须做很多巧妙的技巧),但我认为更大的部分是由于不充分/缺失的文档所致。 - yugr
ERROR: expected '=' - ar2015

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接