【问题标题】:Why doesn't my AppDomain.CurrentDomain.UnhandledException event always fire?为什么我的 AppDomain.CurrentDomain.UnhandledException 事件不总是触发?
【发布时间】:2011-06-29 16:18:33
【问题描述】:

我有一个在发布模式下运行的 Windows 服务程序,它运行 24/7,它对 C++ 库进行一些进程内 COM 调用,偶尔它会崩溃,但 AppDomain.CurrentDomain.UnhandledException 事件不会触发。

相反,进程只是终止并写入了一条 EventLog 日志消息……但再次奇怪的是我的代码没有任何 EventLog.WriteEntry 调用。

有人能帮我弄清楚为什么 AppDomain.CurrentDomain.UnhandledException 在所有情况下都没有触发吗?

提前致谢

事件日志消息:

EventType clr20r3、P1 ProgramName.exe、P2 0.0.0.0、P3 4d5bd49f、P4 mscorlib、P5 2.0.0.0、P6 4a7cd8f7、P7 41b3、P8 a3、P9 system.argumentoutofrange、P10 NIL。

【问题讨论】:

    标签: c# .net exception-handling


    【解决方案1】:

    事件日志中的条目是由 Windows 编写的,它告诉您有东西正在抛出 ArgumentOutOfRangeException。如果没有看到 AppDomain.CurrentDomain.UnhandledException 的事件处理程序中包含的代码,很难说为什么,但很可能发生以下情况之一:

    • 您的异常处理程序正在抛出 ArgumentOutOfRangeException
    • 您的进程中有多个 AppDomain,它是引发参数超出范围异常的其他 AppDomain 之一。

    前者的可能性更大。 非常仔细地检查异常处理程序中的代码,并寻找可能传递错误参数的任何地方。您可以尝试将整个异常处理程序包装在一个 try`catch` 中,它将异常处理程序中发生的任何异常记录到事件日志中,并查看是否可以获得更多信息,例如堆栈跟踪。

    此外,请确保您在应用程序中部署了调试符号(.pdb 文件),以便记录的任何堆栈跟踪都会为您提供行号以供您参考。

    【讨论】:

    • 嗨,只有 1 个 appDomain,而 AppDomain.CurrentDomain.UnhandledException 事件只有 1 个 log4net 调用。
    • @arkina,那么您是否100% 确定您的事件处理程序被命中并且您的 log4net 调用没有被传递任何nulls? =)
    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 2011-12-03
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多