代码之家  ›  专栏  ›  技术社区  ›  Pierre-Alain Vigeant

跟踪所有处理的异常

  •  1
  • Pierre-Alain Vigeant  · 技术社区  · 14 年前

    我想知道为什么 已部署

    bool requireUpdate = false;
    try
    {
        requireUpdate = !client.IsUpToDate();
    }
    catch{ }
    

    我需要一个方法来得到例外 无需重新编译

    有没有办法修改 app.config 处理的异常 到日志文件,而不管它们是如何处理的?

    7 回复  |  直到 14 年前
        1
  •  1
  •   Oded    14 年前

    不幸的是,我们对此无能为力 已处理 例外情况,因为 处理(即使非常糟糕,如你的情况)。

    获得它们的最佳方法是重写/重新编译/部署。

        2
  •  2
  •   jimbobmcgee    8 年前

    AppDomain

    在应用程序的设置代码中的某个点(例如。 Program.Main Application_OnStart ,等等),可以添加处理程序:

    class Program
    {
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.FirstChanceException 
                += FirstChanceException
    
            // ...rest of your app startup
        }
    
        private static bool LogFirstChanceExceptions
        {
            get  
            {
                return ConfigurationManager.AppSettings["logFirstChanceExceptions"] 
                                           .Equals(bool.TrueString)
            }
        }
    
        private static void FirstChanceException(object sender,
                                                 FirstChanceExceptionEventArgs e)
        {
            if (e != null && 
                e.Exception != null &&
                LogFirstChanceExceptions)
            {
                Console.Error.WriteLine("First-chance {0}: {1}",
                                        e.Exception.GetType(), 
                                        e.Exception.Message);
            }
        }
    }
    

    (未经测试,无保修等。未图示:任何重新进入处理,以防 FirstChanceException 处理程序本身抛出异常)

    可以

        3
  •  1
  •   Aliostad    14 年前

    更新

    CLR分析可以帮助你!

    http://msdn.microsoft.com/en-us/magazine/cc301839.aspx

    您基本上可以跟踪您的异常:

        4
  •  1
  •   Lex Li    14 年前

    使用低级调试器,例如WinDbg,您将能够知道第一次机会异常。

        5
  •  0
  •   Jason    14 年前

    我在Java中使用的技巧:

    遍历应用程序中的所有catch块,查找空块。向块中添加一条调试或跟踪消息,比如“捕获预期的异常”和异常。无论如何,您都应该拥有这个特性,并设置一个策略,即默认地接受异常是绝对不可接受的。

    如果未能清除异常,请重新编译基本异常,在应用程序处于调试(或跟踪)模式时,向no arg构造函数添加一个块以记录堆栈跟踪。显然,如果您的应用程序/库有自己的异常继承权,那么这样做更容易,但是有一些方法可以注入这种行为(在这里,在C中实现这种行为的方法与我实现这种行为的方法是不同的)

        6
  •  0
  •   John Gardner    14 年前

    还有另一种选择,但它可能很漂亮,也可能不漂亮:鼹鼠。

    . 您可能可以使用它来用您的代理来替换该方法,该代理执行您想要的操作。

    摩尔是Pex的一部分: http://research.microsoft.com/en-us/projects/pex/default.aspx

        7
  •  -2
  •   Community Egal    7 年前

    solution 可能就是你要找的。

    System.Diagnostics.EventLog事件日志.WriteEntry(“MyEventSource”,异常.StackTrace,
    System.Diagnostics.EventLogEntryType(警告);

    另外应用程序配置从同一个环节看来: <system.diagnostics> <switches>

        <add name="MySwitch" value="Verbose" />
    </switches>
    <trace autoflush="true">
        <listeners>
            <add name="EventLogger"
                 type="System.Diagnostics.EventLogTraceListener"
                 initializeData="NameOfYourApplication" />
        </listeners>
    </trace>