Windows 窗体崩溃:全局异常处理程序中捕获的意外 NullReferenceException

Posted

技术标签:

【中文标题】Windows 窗体崩溃:全局异常处理程序中捕获的意外 NullReferenceException【英文标题】:Windows Forms Crash : Unexpected NullReferenceException caught in Global Exception Handler 【发布时间】:2021-11-19 15:45:55 【问题描述】:

我们开发了一个 Windows 窗体应用程序,它可以捕获用户交互,即键入的文本、点击。有时,在某些机器上,我们会出乎意料地得到以下异常:

Object reference not set to an instance of an object.

   at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at Recorder.Program.GlobalExceptionHandler(Object sender, UnhandledExceptionEventArgs args)
   at System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove)
   at System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at Recorder.Program.Main(String[] args)

该问题不会在开发或测试环境中复制,而是在发布中发生。尽管我们所有的代码都包含了异常处理,但上述错误发生在 main 方法中并被 GlobalExcptionHandler 捕获。该异常没有详细信息,也没有堆栈跟踪。

ExceptionMessage - Object reference not set to an instance of an object. 
ExceptionSource -   
ExceptionTarget -   
StackTrace - Logging Stack Trace is disabled

我尝试在网上查找问题,发现以下链接看起来相似,但同样没有解决方案:

http://arnosoftwaredev.blogspot.com/2005/07/pragmatic-solutions-for-imperfect.html

http://dotnet.community/threads/somebody-help-me-with-this-error-plz.13965/#post-60920

通常我们已经注意到,它在安装产品后不久就会崩溃,或者在运行资源密集型应用程序(例如 MS Teams、MS Excel)时崩溃

请指导!

【问题讨论】:

【参考方案1】:

我会首先查看编译器“错误列表”选项卡中的任何信息或警告消息。 Roslyn 编译器通常非常擅长指出未初始化的变量。修复所有这些警告/信息后,打开“警告为错误”以确保您不会收到任何新警告。

另外,查找任何有条件编译的代码:

#if DEBUG
.. something gets initialised  
#endif

【讨论】:

感谢您的建议。肯定会尝试,但这似乎是与处理对象或与全局鼠标/键盘挂钩相关的其他问题。

以上是关于Windows 窗体崩溃:全局异常处理程序中捕获的意外 NullReferenceException的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

.netcore全局异常处理

winforms控制的全局异常处理

Android应用捕获全局异常自定义处理

全局捕获所有可能的android异常并重新加载应用程序