使用Address Sanitizer和gcc7.1.0时如何生成核心转储

Wen*_* Wu 5 gcc coredump address-sanitizer

-fsanitize=address在 centOS 7.2.1511 上编译了我的代码。当我将 gcc 更新到 7.1.0 时,它无法再生成核心转储文件。有谁能够帮助我?

gcc编译选项:

-lm -g3 -Wall -Wno-unknown-pragmas --std=c++11 -Werror -ggdb -fsanitize=address -fno-omit-frame-pointer -D_GLIBCXX_USE_CXX11_ABI=0
Run Code Online (Sandbox Code Playgroud)

链接选项:

-lxml2 -lpthread -lmysqlclient -L/usr/lib64/mysql/ -llog4cxx -lprotobuf -llua -lluabind -lhiredis -lcrypto -lcurl -ljsoncpp -Wl,-E -fsanitize=address -ldl
Run Code Online (Sandbox Code Playgroud)

当我使用 gcc 4.8.5 时,通常使用如下设置的选项 ASAN_OPTIONS 生成核心转储:

export ASAN_OPTIONS="disable_core=0:unmap_shadow_on_exit=1:abort_on_error=1"
Run Code Online (Sandbox Code Playgroud)

当我将 gcc 更新到 7.1.0 时,即使 ASAN_OPTIONS 设置如上,核心转储也无法再生成。

Wen*_* Wu 4

问题解决了。新的sanitizer选项ASAN_OPTIONS应该设置为“disable_coredump”,我这样设置:

ASAN_OPTIONS="disable_coredump=0:unmap_shadow_on_exit=1:abort_on_error=1"
Run Code Online (Sandbox Code Playgroud)