问题描述
是否可以在 Visual Studio(C# 调试器)中抑制特定代码行的第一次机会抑制?
Is it possible to suppress first chance supressions in Visual Studio (C# debugger) for specific lines of code?
我想在调试器中使用第一次机会异常,但是在我获得有趣的代码之前,我需要通过每个调试会话大约 50 个第一次机会异常.
I want to use first chance exceptions in the debugger, but there are about 50 first chance exceptions I need to go through every debug session before I get to the interesting code.
目前,我关闭了第一次机会异常,然后手动打开它们,但这既麻烦又浪费时间.
Currently, I turn off first chance exceptions and then manually turn them on, but that's a hassle and a time sink.
推荐答案
DebuggerNonUserCodeAttribute Class
从 .NET 2.0 开始,如果您使用 [DebuggerNonUserCode] 属性,调试器将跳过其中的第一次机会异常.
DebuggerNonUserCodeAttribute Class
As of .NET 2.0, if you mark an method with the [DebuggerNonUserCode] attribute, the debugger will skip first chance exceptions in it.
引用自 MSDN 链接(强调的是我的):
Quote from MSDN link (emphasis added is mine):
会员不是代码的一部分由用户专门创建可以使调试体验复杂化.该属性抑制显示这些附属类型和成员在调试器窗口并自动逐步通过,而不是进入,设计者提供的代码.
除了调试之外,没有与此属性相关的运行时行为.
There is no runtime behaviour apart from debugging, associated with this attribute.
但是,如果您只有一个方法,其中某些行旨在包含在 Visual Studio 的第一次机会异常处理机制中,而其他行要排除在外,那么在这种粒度级别上可能没有解决方案.您始终可以将一个大方法重构为多个方法,并在选定的方法上使用该属性.
However if you have just one method with certain lines intended for inclusion in Visual Studio's first chance exception handling mechanism, and other lines to be excluded, there's likely not a solution at this level of granularity. You can always refactor a large method into multiple methods and use the attribute on select ones.
附加信息...
来自这篇文章
using System.Diagnostics;
using XL = Microsoft.Office.Interop.Excel;
public static class WorkbookExtensions
{
[DebuggerNonUserCode]
public static bool TryGetWorksheet(this XL.Workbook wb, string worksheetName, out XL.Worksheet retrievedWorksheet)
{
bool exists = false;
retrievedWorksheet = null;
try
{
retrievedWorksheet = GetWorksheet(wb, worksheetName);
exists = retrievedWorksheet != null;
}
catch(COMException)
{
exists = false;
}
return exists;
}
[DebuggerNonUserCode]
public static XL.Worksheet GetWorksheet(this XL.Workbook wb, string worksheetName)
{
return wb.Worksheets.get_Item(worksheetName) as XL.Worksheet;
}
}
文章 展示了可能有用的相关 VS 项目选项.
The article shows related VS project options that might be useful.
这篇关于抑制第一次机会异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!