启用控制台窗口以显示异常错误详细信息

时间:2015-07-12 09:09:24

标签: c# console

我将一个简单的ArgumentException编码为:

if (String.IsNullOrEmpty(value))
            {
                throw new ArgumentException("Name cannot be null or empty");
            }

现在,当我使用空字符串运行程序来测试此异常是否正常运行时,调试器会将我带回MS Visual Studio,如下所示:

throw new ArgumentException("Name cannot be null or empty");

虽然我实际上希望Console在控制台窗口中向我显示错误消息及其详细信息。 Console显示的是一个空窗口。

知道如何在控制台窗口中显示异常错误详细信息吗?

2 个答案:

答案 0 :(得分:2)

  throw new ArgumentException("Name cannot be null or empty");

如果在代码中抛出异常并且在任何调用方法中都没有try / catch语句,那么程序将无条件地崩溃。使用调试器(F5)运行时看到的情况应该是有用的。它可以让您诊断程序即将崩溃的原因。虽然这个特殊情况不应该让你感觉太多,但是当你没有想到这个例外时,你会更喜欢它。

如果你在没有调试器(Ctrl + F5)的情况下运行,那么将会发生什么取决于.NET版本。对于v2.0到3.5,您将获得任何诊断。弹出Windows WER对话框,告诉用户程序崩溃时出现类似“ConsoleApplication1停止工作”的消息。提供告诉微软有关崩溃的信息,以便他们可以修复代码中的错误。没用:)

如果在v4.0及更高版本上运行,则CLR会将异常消息和堆栈跟踪打印到控制台窗口,然后显示WER对话框。可能你喜欢什么。

通常,您不希望让它达到这个目的,并确保生成合理的诊断消息,而不管.NET版本如何。如果没有WER对话,那就太过于“你失败”的耻辱。您可以通过订阅AppDomain.UnhandledException事件来完成此操作,如下所示:

    static void Main(string[] args) {
        if (!System.Diagnostics.Debugger.IsAttached) {
            AppDomain.CurrentDomain.UnhandledException += ReportUnhandledException;
        }
        // Rest of code
        //...
        throw new Exception("Kaboom");   // Test
    }

    private static void ReportUnhandledException(object sender, UnhandledExceptionEventArgs e) {
        Console.WriteLine();
        Console.WriteLine("We're very sorry, this program unexpectedly failed.");
        Console.WriteLine("Please include the following information in your support request:");
        Console.WriteLine();
        Console.WriteLine(e.ExceptionObject.ToString());
        Console.WriteLine();
        Console.Write("Please press any key to end the program");
        Console.ReadKey();
        Environment.Exit(1);
    }

您可以使用此代码执行更多操作,例如记录异常,以便有永久记录。或者通过电子邮件发送信息,这样您就可以在不在现场的情况下了解代码所发生的情况,从而帮助您确保应用防弹。

请注意此代码段中的Debugger.IsAttached检查。它确保调试器仍然有助于诊断未处理的异常。您可以删除该检查以获得您要求的内容。你不应该。

答案 1 :(得分:1)

您可以通过打开菜单Debug - >为ArgumentException添加例外。例外(Ctrl + D, E)。解开"投掷"和"用户未处理"。

现在,当抛出ArgumentException时,Visual Studio不会中断。

enter image description here