相关疑难解决方法(0)

Visual Studio:如何打破处理的异常?

我希望Visual Studio在发生处理异常时中断(即我不只是想看到"第一次机会"消息,我想调试实际异常).

例如,我希望调试器在异常处中断:

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}
Run Code Online (Sandbox Code Playgroud)

我遇到了Visual Studio.NET的这些笔记:

1)在VS.NET中进入Debug菜单>>"Exceptions ...">>"Common Language Runtime Exceptions">>"System"并选择"System.NullReferenceException"

2)在该对话框的底部有一个"当抛出异常时:"组框,选择"进入调试器"

3)运行您的方案.抛出异常时,调试器将停止并通过一个对话框通知您,类似于:"抛出类型"System.NullReferenceException"的异常.[Break] [Continue]"

点击[休息].这将使您处于导致问题的代码行.

但它们不适用于Visual Studio 2005(" 调试"菜单上没有" 例外"选项).

有谁知道在Visual Studio中找到这个选项对话框中的" 当抛出异常时 "组框,并选择" 进入调试器 "?

更新:问题是我的调试菜单没有Exceptions项.我自定义菜单以手动添加它.

debugging exception visual-studio

157
推荐指数
5
解决办法
10万
查看次数

如何使[DebuggerNonUserCode]在简单的测试用例中隐藏调试器的异常?

建立:

1)MSVS 2015,选项 - >调试器 - >"仅我的代码"被选中.

2)此示例代码放在某个类中并在启动期间调用:

    static bool TestIgnoreException()
    {
        Exception ex;
        return TrySomething(out ex);
    }

    [DebuggerNonUserCode] // Prevent exceptions from stopping the debugger within this method. 
    static bool TrySomething(out Exception exOut)
    {
        try
        {
            if (Environment. MachineName.Length != -1)
                throw new Exception("ThrewIt.");

            exOut = null;
            return true;
        }
        catch (Exception ex)
        {
            exOut = ex;
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

3)启动调试器

预期的结果是TestIgnoreException()以静默方式运行并返回false.

实际结果是调试器在TestIgnoreException()中停止,即使在该范围内不应该处理异常.

在此输入图像描述

4)也使用[DebuggerHidden]重新尝试,结果相同.

动机:

动机是针对某些不受您控制的API不提供"尝试"方法而仅通过使用异常指示失败的情况.

众多此类示例中的一个是.NET TcpClient.Connect(主机,端口).假设一个程序总是在启动期间测试一些连接,调试器不应该每次都停在这个特定的代码段上.

使用标准的"抛出时中断"异常复选框并不好,因为它按类型全局工作.它无法配置为在本地工作.检查代码的其他开发人员也应该自动跳过异常.

c# debugging attributes exception visual-studio-2015

6
推荐指数
1
解决办法
1759
查看次数