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 全局异常处理器 )