如何让AddressSanitizer检测内存泄漏时不修改退出状态$?
解决AddressSanitizer内存泄漏导致退出状态异常的问题
你可以通过以下几种方式实现忽略内存泄漏导致的退出状态变更,同时按需保留内存泄漏的检测报告:
方法1:仅修改泄漏检测的退出码(保留泄漏报告)
设置环境变量 ASAN_OPTIONS=exitcode=0,让AddressSanitizer在仅检测到内存泄漏时返回0的退出状态,而遇到其他真正的运行时错误(如内存越界、使用已释放内存)时仍返回非0状态。
运行示例:
ASAN_OPTIONS=exitcode=0 ./leak
执行后,你仍会看到内存泄漏的详细报告,但执行 echo $? 会输出0,符合测试用例本身执行成功的判断逻辑。
方法2:完全关闭内存泄漏检测
如果你不需要内存泄漏的检测报告,可以直接关闭泄漏检测功能,设置环境变量 ASAN_OPTIONS=detect_leaks=0:
运行示例:
ASAN_OPTIONS=detect_leaks=0 ./leak
此时程序不会输出任何内存泄漏相关内容,退出状态完全由程序本身的返回值决定。
补充说明
- 这两个选项均为运行时环境变量,无需修改原有的编译命令。
- 如果需要同时设置多个ASan选项,可用冒号分隔,例如:
ASAN_OPTIONS=exitcode=0:verbosity=1 ./leak
内容的提问来源于stack exchange,提问作者Pooran Chandra Pandey
相关产品推荐
相关产品推荐

