VS2019 16 ASAN配置详解:内存问题检测

1星 需积分: 42 7 下载量 86 浏览量 更新于2024-08-05 收藏 537B TXT 举报
"VS2019 16的ASAN常用选项" 在Visual Studio 2019版本16及更高版本中,Google AddressSanitizer(ASAN)被集成,这是一个强大的动态内存错误检测工具,可以帮助开发者检测并定位多种内存问题。ASAN能够检测到包括栈、堆、全局变量的越界访问,分配与释放不匹配,分配大小过大,new和delete操作类型不匹配,释放后使用,栈作用域后使用,返回后使用,动态初始化时的问题等。以下是一些ASAN的常用配置选项及其详细解释: 1. **halt_on_error=0/1**: 这个选项决定在检测到错误时是否立即终止程序。如果设置为0,程序将继续运行,而设置为1则会在发现错误时停止。 2. **quarantine_size_mb=1024**: 隔离区大小设置为1024MB,用于存放可能有问题的对象,防止它们造成进一步的破坏。 3. **thread_local_quarantine_size_kb=512**: 每线程隔离区的大小设置为512KB,用于线程本地存储可疑对象。 4. **log_path=asan.log**: 错误日志的保存路径,这里设置为asan.log文件。 5. **alloc_dealloc_mismatch=1**: 开启检测分配与释放不匹配的问题。 6. **new_delete_type_mismatch=1**: 检测new和delete操作符对类型的匹配性。 7. **detect_stack_use_after_return=1**: 开启检测栈使用超范围,即函数返回后栈上内存的使用情况。 8. **allow_user_poisoning=1**: 允许用户标记特定区域为已损坏,以进行特定的错误检测。 9. **check_initialization_order=1**: 检查全局和静态变量的初始化顺序,防止因初始化顺序不当导致的问题。 10. **report_globals=1**: 报告全局变量的内存错误。 11. **debug=1**: 在调试模式下运行ASAN,提供更多调试信息。 12. **sleep_before_dying=5**: 程序在检测到错误后等待5秒才退出,方便开发者查看错误状态。 13. **atexit=1**: 在程序退出时打印错误报告。 14. **print_stats=1**: 在程序结束时打印内存使用统计信息。 15. **strict_init_order=1**: 严格检查初始化顺序,确保所有全局和静态变量按预期顺序初始化。 16. **detect_invalid_pointer_pairs=2**: 检测无效指针对,例如空指针解引用和未初始化的指针。 17. **detect_container_overflow=1**: 检测容器溢出,如数组或向量的越界访问。 18. **detect_odr_violation=2**: 检测One Definition Rule (ODR) 违反,确保相同名称的实体在所有翻译单元中具有相同的定义。 19. **verbosity=2**: 设置输出信息的详细程度,2表示较为详细的输出。 20. **color=always**: 总是使用颜色编码来突出显示错误信息,便于阅读。 21. **detect_stack_use_after_return=1**: 再次提及,开启检测栈使用超范围。 22. **allocator_may_return_null=1**: 分配器允许返回NULL,意味着当内存不足时,分配函数可能会返回NULL。 23. **windows_hook_legacy_allocators=1**: 在Windows平台上,钩住旧版的内存分配器,以便ASAN能够监控这些分配。 通过正确配置这些选项,开发者可以在VS2019中利用ASAN更有效地找出和修复内存相关的错误,提高代码质量。同时,理解这些选项的含义有助于根据具体需求调整ASAN的行为,以达到最佳的检测效果。