VB调试命中条件分支暂停方法 替代Debug.Assert(False)的官方方案
空If块场景下条件命中调试变量的标准方案
问题场景
当VB.NET代码的If判断块内没有可执行代码、只有注释时,无法直接在块内挂载断点,无法在条件命中时查看块内上下文变量值,临时方案为插入Debug.Assert(False)或无意义赋值代码挂载断点,示例代码如下:
For Each sDir In sDirs Dim sFoldername As String = FolderNameFromPath(sDir) If Has(sFoldername, sFile) Or Has(sFile, sFoldername) Then ' 期望条件命中时断点,检查sFile、sFoldername变量值 ' 块内无有效可执行代码,无法直接挂载断点 End If Next

官方推荐无侵入方案
完全不需要修改业务代码,直接使用Visual Studio原生的条件断点功能即可实现需求,操作步骤:
- 点击
If Has(sFoldername, sFile) Or Has(sFile, sFoldername) Then行的侧边栏,按F9打上普通断点 - 右键断点的红色标记,选择「条件」
- 条件规则输入和If判断完全一致的逻辑:
Has(sFoldername, sFile) Or Has(sFile, sFoldername),触发时机选择「为true」 - 保存配置后启动调试,程序仅会在If条件成立时在该行中断
- 中断时If条件的判断逻辑已经执行完毕,直接鼠标悬停在变量名上、或通过局部变量/自动变量窗口,就能查看
sFile和sFoldername的实时值,不需要进入If块内部。
补充说明
- 之前使用的
Debug.Assert(False)、插入无意义变量赋值的方式属于侵入式修改,调试后如果漏删会导致生产环境异常或残留冗余代码,不推荐使用。 - 如果不想配置条件断点,也可以直接在If行打普通断点,命中后在即时窗口执行
?Has(sFoldername, sFile) Or Has(sFile, sFoldername)判断当前是否命中目标条件,不满足按F5继续即可,只是效率低于条件断点方案。
内容的提问来源于stack exchange,提问作者tmighty
相关产品推荐
相关产品推荐

