You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Compiler Explorer中使用MSVC开启AddressSanitizer(ASAN)?

如何在Compiler Explorer中使用MSVC开启AddressSanitizer(ASAN)?

别急,我来帮你搞定在Compiler Explorer里用MSVC启用ASAN的问题!你遇到的情况其实是因为MSVC的ASAN在Compiler Explorer里的启用逻辑和GCC/Clang有点不一样,我给你一步步说清楚:

1. 先选对MSVC版本

ASAN在MSVC里是从Visual Studio 2019 v16.9版本开始支持的,所以在Compiler Explorer的编译器下拉菜单里,一定要选msvc v193及以上的版本(比如最新的msvc v1937这类稳定版),旧版本的MSVC根本没集成ASAN,肯定用不了。

2. 输入正确的编译标志

你用的/fsanitize=address /fsanitize-address-use-after-return是完全正确的,直接把这两个参数完整输入到Compiler Explorer的「Compiler Flags」输入框里就行。注意MSVC的编译标志是用斜杠/开头的,别写成GCC/Clang的横杠-了。

3. 关键!一定要运行程序才能看到ASAN结果

这是最容易被忽略的点:MSVC的ASAN是运行时检测工具,不是编译时静态分析!你光编译代码是看不到任何ASAN提示的,必须点击Compiler Explorer里的「Run」按钮(确保「Run this code」选项是开启的),让程序实际跑起来,ASAN才能检测到栈后使用的错误并输出提示。

4. 验证你的测试代码

用你提供的测试代码为例,当你完成上面三步后,点击Run,就能在输出面板看到ASAN的报错信息了,大概长这样:

AddressSanitizer: stack-use-after-scope on address 0x000000...

常见排查点如果还是不行

  • 检查是不是选了太老的MSVC版本,直接挑下拉菜单里最新的那个试试;
  • 确认编译标志没打错字,比如/fsanitize=address有没有少写字母;
  • 看看Compiler Explorer是不是设置了「Compile only」模式,改成「Compile and run」;
  • 偶尔Compiler Explorer会有缓存问题,刷新页面重新配置一次试试。

这样应该就能在Compiler Explorer里用MSVC正常触发ASAN的检测啦!

火山引擎 最新活动