You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio:触发AddressSanitizer异常后如何单次忽略并继续执行

解决方案

方法1:单次跳过当前异常(不修改代码,仅本次调试生效)

当ASAN异常弹窗弹出时按以下步骤操作即可跳过本次触发的异常:

  • 点击弹窗上的「Break」按钮进入调试中断状态
  • 按快捷键Ctrl+Alt+I打开即时窗口(也可以通过菜单路径Debug -> Windows -> Immediate打开)
  • 在即时窗口输入命令$exception = null后回车,清空当前异常上下文
  • 右键点击代码编辑区左侧的黄色执行指针,选择「Set Next Statement」,将执行位置手动移动到my_strlen函数的return n;行,跳过触发越界的最后一次循环访问
  • 按F5继续运行即可,不会再重复触发当前位置的同个异常

方法2:仅禁用单个函数的ASAN检查(适合暂时不想修复问题,又不想每次调试都手动操作的场景)

只需要给你的my_strlen函数添加MSVC专用的ASAN忽略属性,就可以仅关闭该函数的地址消毒检查,其余代码的ASAN检查完全不受影响,修改后的代码如下:

__declspec(no_sanitize_address) size_t my_strlen(const char *my_string) 
{
    int n = 0;
    if (my_string == NULL) return 0;
    while (my_string[n] != 0) n++;
    return n;
}

注意:两种方案都只是临时规避手段,你代码中的越界访问是真实存在的,后续建议排查问题根因修复,比如确认传入的字符串是否存在缺少'\0'终止符的情况。

内容的提问来源于stack exchange,提问作者Bùi Văn Thủ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 14:15:06