VS2022调试时Catch块无法捕获NullReferenceException问题咨询
问题原因及解决办法
核心原因
VS2022调试器默认会在公共语言运行时异常(比如NullReferenceException)抛出时直接中断程序,这个优先级高于代码里的Catch块,所以调试时你看不到Catch执行;而直接运行生成的exe时没有调试器介入,异常会被代码正常捕获。
调试器设置调整步骤
- 打开VS2022的「调试」菜单 → 「Windows」→ 「异常设置」(快捷键
Ctrl+Alt+E) - 在弹出的窗口中,找到「公共语言运行时异常」,展开后取消勾选
System.NullReferenceException的「抛出」选项 - 也可以关闭「启用仅我的代码」:路径为「工具」→「选项」→「调试」→「常规」,取消勾选该选项(不过前者更精准,只针对特定异常)
代码优化(从根源避免异常)
最好提前判断列是否存在,避免触发NullReferenceException,代码修改如下:
'sort columns With Me.dgv02 Try Dim yearColumn = .Columns("Year") If yearColumn IsNot Nothing Then yearColumn.DisplayIndex = 0 End If Index = 1 ' 11.09.2013 Catch ex As Exception column = "Sum [kg]" End Try End With
额外说明
BackgroundWorker.RunWorkerCompleted事件运行在UI线程,操作DataGridView是安全的,问题本质就是调试器的异常拦截机制导致Catch块在调试时无法触发,调整设置后即可正常执行。
内容的提问来源于stack exchange,提问作者grafj73
相关产品推荐
相关产品推荐

