C# 抑制第一次机会异常
是否可以在Visual Studio C调试器中为特定的代码行抑制首次机会抑制 我想在调试器中使用第一次机会异常,但在获得感兴趣的代码之前,我需要在每个调试会话中处理大约50个第一次机会异常C# 抑制第一次机会异常,c#,debugging,visual-studio-2008,exception,first-chance-exception,C#,Debugging,Visual Studio 2008,Exception,First Chance Exception,是否可以在Visual Studio C调试器中为特定的代码行抑制首次机会抑制 我想在调试器中使用第一次机会异常,但在获得感兴趣的代码之前,我需要在每个调试会话中处理大约50个第一次机会异常 目前,我关闭first chance异常,然后手动打开它们,但这既麻烦又浪费时间。发生这种情况是因为错误使用了异常。在你得到有趣的代码之前得到50不是一个好迹象。在VisualStudio中,无法在某些代码中跳过它们,因为它不是为鼓励您所做的工作而设计的 也就是说,我要做的是关闭在调试器中捕获第一次机会的异
目前,我关闭first chance异常,然后手动打开它们,但这既麻烦又浪费时间。发生这种情况是因为错误使用了异常。在你得到有趣的代码之前得到50不是一个好迹象。在VisualStudio中,无法在某些代码中跳过它们,因为它不是为鼓励您所做的工作而设计的 也就是说,我要做的是关闭在调试器中捕获第一次机会的异常,显式地尝试/捕获您想要捕获的异常,并将其放入调试器。捕获后中断。DebuggerNonUserCodeAttribute类 从.NET 2.0开始,如果使用属性标记方法,调试器将跳过其中的第一次异常 引用MSDN链接,重点是我的: 成员 这不是代码的一部分 用户可以专门创建 使调试体验复杂化。 此属性禁止显示 中的这些附加类型和成员 调试器窗口将自动关闭 逐步通过,而不是进入, 设计器提供的代码 除了调试之外,没有与此属性关联的运行时行为 但是,如果您只有一个方法,其中某些行打算包含在VisualStudio的first chance异常处理机制中,而其他行则被排除在外,那么在这种粒度级别上可能没有解决方案。您始终可以将一个大型方法重构为多个方法,并在选择的方法上使用该属性 其他信息 来自的示例用法 显示可能有用的相关VS项目选项。
我也不例外。我的代码是现有产品的外接程序。现有产品会从外接程序中吞并异常,因此我希望使用第一次机会异常来确保我的异常不会被吞并,但我不想费力地处理包装中未处理的现有异常。我应该重申,这些是第一次机会异常,不是第二次机会的异常。在许多情况下,复杂程序中会出现异常,所有这些都是开发人员无法控制的。例如,当使用元素时元素消失时,自动化会引发异常。任何时候你处理COM,或者注入到另一个进程中,异常都是很常见的。。。我不知道这件事,非常感谢。这使得调试所有意外异常变得更加容易。谢谢,这终于解决了我的问题。Skeet/Gravel的MiscUtil依赖于抛出的异常,它们总是作为第一次机会异常被捕获,即使它们被立即处理。将此属性应用于他们的某些类修复了此问题。您确实意识到这仍然会到达“FirstChanceExceptions”事件处理程序。您的提示只告诉编译器不要打断您指定的方法。这并不能解决这里所问的问题。标识不属于应用程序用户代码一部分的类型或成员。
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;
}
}