我像这样编译我的代码以启用 Asan:
g++ -O0 -g -fsanitize=address -fno-omit-frame-pointer
但它从不生成核心转储,以便我稍后可以检查错误的详细信息。我怎样才能生成它?
我像这样编译我的代码以启用 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
(默认情况下,coredump 在那里被禁用,因为担心它们会太大)。
有关标志的完整列表,您可以查看Asan wiki。