asan和cuda不兼容问题记录

遇到的问题:在使用cuda的时候用asan排查内存问题,cuda相关api无法正常使用,会出现out of memory的错误。
原来一直是把cuda部分先排除,编译一个不含cuda的程序做排查。现在cuda集成度特别高,不能这么做了。
可以通过添加ASAN_OPTIONS=protect_shadow_gap=0的环境变量解决

对于asan的使用个人喜欢在cmake中添加一条

SET(CMAKE_CXX_FLAGS_ASAN "${CMAKE_CXX_FLAGS} -g -O0 -ggdb -fno-omit-frame-pointer fsanitize=address -fsanitize-recover=address")

然后编译的时候就可以把CMAKE_BUILD_TYPE设置成ASAN编译出来的就是asan版本的程序了
直接运行时有内存错误便会输出具体信息。
具体使用指路https://github.com/google/sanitizers/wiki/AddressSanitizer
运行时设置ASAN_OPTIONS环境变量可以对asan行为进行配置

@

Show Comments