【问题标题】:How to generate core dump on AddressSanitizer error如何在 AddressSanitizer 错误时生成核心转储
【发布时间】:2017-03-17 07:31:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: gcc coredump address-sanitizer sanitizer


    【解决方案1】:

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

    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

    【讨论】:

    • 这是我在网上唯一能找到我的 64 位系统正确答案的地方。谢谢!
    • @the_endian 谢谢。看到阿三这么难用,确实很伤心。一些复杂性是合理的(Asan 必须做很多巧妙的技巧),但 IMO 很大一部分是由于文档不足/缺失。
    • ERROR: expected '='
    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    相关资源
    最近更新 更多