AddressSanitizer (ASan) 是一种编译器和执行时间技术,会以 零 误报来公开许多难以发现的 bug:
从 Visual Studio 2019 16.9 版开始,Microsoft C/c + + 编译器 (MSVC) 和 IDE 支援AddressSanitizer
先根据官网提供的source code建立一个CPP档案
// basic-global-overflow.cpp
#include <stdio.h>
int x[100];
int main() {
#ifdef __SANITIZE_ADDRESS__
printf("Address sanitizer enabled\n");
#else
printf("Address sanitizer not enabled\n");
#endif
printf("Hello!\n");
x[100] = 5; // Boom!
return 0;
}
设定ASan
专案属性 → C/C++ → 一般 → 启用[ASan] 选择是
MSVS的 AddressSanitizer 已知问题 有开启ASan还需进行一些设定,才能正常使用
我的环境需要将 侦错资讯格式 设定成 无,才可以正常使用
F5执行後显示错误讯息
0x007a9350 is located 0 bytes to the right of global variable 'x' defined in 'main.cpp:3:4' (0x7a91c0) of size 400
这边显示显示错误的地方
#0 0x7a1081 in main+0x61 (D:\temp\stdThreadPrj\Debug\stdThreadPrj.exe+0x401081)
这个部分可以参考 使用visual studio trace call stack的private function 来找到错误的位置
reference
[1] AddressSanitizer | Microsoft Docs
在网路世界中,安全永远是最最重要的事情,而云端安全当然也不例外。任何的安全问题都来自於人为的疏忽,部...
如果想要控制网格项目的放置位置,就要知道怎麽定义项目放置的"行"与"列...
[Day8] Fun with HTML5 Canvas Canvas 的运用 需要用到的技巧与练习...
from Unsplash 为什麽工程师也要懂产品设计? 前面笔记提过,现代科技秒新分异、资讯爆炸...
Photo by Adi Goldstein on Unsplash 大家好 我是毛毛,因为这波疫...