【问题标题】:How to detect unhandled exceptions in Visual Studio?如何在 Visual Studio 中检测未处理的异常?
【发布时间】:2013-11-19 02:43:42
【问题描述】:

我正在开发一个应用程序,并且在某些部分存在未处理的异常。我想在调用者方法中捕获它们并解决它们。

放置一个通用处理程序对我的情况不利。我想忽略一些异常并让应用继续工作。

Visual Studio 中是否有任何工具或插件可用于此目的?

更新:澄清我的问题:有很多方法调用没有使用 try catch,我想知道这些方法在哪里,自动地,不检查所有代码行

【问题讨论】:

  • 很多时候,(但不总是),一个异常表明你,程序员做错了什么(一个无效的转换,使用null引用等)所以除非有一些特定的如果您知道需要处理异常,则应改为修复异常的根本原因。这是非常笼统的建议,解决方案将根据具体情况进行。
  • 感谢@Jonathon。我的应用程序连接到互联网,所以大多数例外是由于连接不良或服务器端错误。
  • 那么您应该在最高级别处理这些特定情况,这样做是有意义的。这里没有银弹。谢天谢地,你有点必​​须做正确的事。

标签: c# .net visual-studio debugging visual-studio-2012


【解决方案1】:

最简单的答案是使用 try-catch 语句。您将要运行的代码包装在 try 中,并将 catch 设置在 try 下方。任何异常都可以在 catch 中处理,并且可以让程序继续运行。您的渔获物应按从最具体到最通用的最后一个顺序排列。

try
    {
         ...code to be run
    }
catch(Exception ex)
    {
        \\handle your exceptions here, you can add as many catches as you need.
        Console.WriteLine(ex);
    }

MSDN for try-catch上阅读更多内容

【讨论】:

  • 感谢@delliottg。我知道如何处理异常,但是,有很多方法调用没有使用 try catch,我想知道这些在哪里,自动,而不检查所有代码行。
  • 啊,我误解了你的问题,你可能想这样说,以便其他人可以帮助你。我不知道有一种工具会自动为您执行此操作。但是,您可以将整个类包装在 try-catch 中,这样您就可以最大限度地减少需要创建的类的数量。打包完所有类后,您可以确定要处理的异常在哪里,并添加内部 try-catch。
【解决方案2】:

与 Java 不同,C# 没有checked exceptions(这是否是一件好事尚有争议;我认为是)。我看到了一些选项来确定哪些方法抛出了什么:

  1. 希望作者使用/// <exception cref="SomeException">Some explanation</exception> 记录它们,以便它们出现在 IntelliSense 中。所有框架代码都有完整记录的异常。

  2. 自己检查源代码或反编译的 IL。

  3. 使用像Exception Reflector 这样的实用程序来检查可能的异常。

【讨论】:

    【解决方案3】:

    最初的 cmets 提出了一些非常有效的观点,但如果您仍想沿着这条路线走下去,您可以尝试以下方法。

    如果您知道要忽略的异常,我建议将它们添加到您的 try catch 考虑以下

            try
            {
                   //Run Code here
            }
            catch (ArgumentNullException ane)
            {
                 // ignore exception here
            }
            catch (AggregateException ae)
            {
                 //ignore exception here
            }
            catch (Exception genericException)
            { 
              // this must be last to catch unhandled exceptions
            }
    

    实际上在重新阅读您的初始帖子后,我的回答并不完全合适,这意味着您必须修改代码并将您的方法调用包含在 try catch..

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 2010-11-04
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多