是否可以在Visual Studio(C#调试器)中抑制特定代码行的第一次机会抑制?
我想在调试器中使用第一次机会异常,但在我得到有趣的代码之前,我需要经历每个调试会话的大约50个第一次机会异常。
目前,我关闭了第一次机会异常,然后手动打开它们,但这是一个麻烦和时间下沉。
答案 0 :(得分:27)
从.NET 2.0开始,如果使用[DebuggerNonUserCode]属性标记方法,调试器将跳过其中的第一次机会异常。
来自MSDN链接的引用(重点是我的):
成员 这不是代码的一部分 由用户专门创建的可以 使调试体验变得复杂。 此属性会禁止显示 这些附属类型和成员 调试器窗口并自动进行 逐步完成,而不是进入, 设计师提供的代码。
除了调试之外,没有与此属性关联的运行时行为。
但是,如果您只有一个方法,某些行旨在包含在Visual Studio的第一次机会异常处理机制中,并且要排除其他行,则可能没有这种粒度级别的解决方案。您始终可以将大型方法重构为多个方法,并在选择的方法上使用该属性。
其他信息......
的使用示例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;
}
}
The article显示可能有用的相关VS项目选项
答案 1 :(得分:-2)
这种情况正在发生,因为您使用了异常。在你得到“有趣的代码”之前获得50并不是一个好兆头。在Visual Studio中,没有办法在某些代码中跳过它们,因为它不是为了鼓励你正在做的事情。
那就是说,我要做的就是关闭调试器中的第一次机会异常,明确地try/catch
你要捕获的异常,并在你Debugger.Break()
时放入已经抓住了它。