如何调试和解决“DisconnectedContext”崩溃?

Posted

技术标签:

【中文标题】如何调试和解决“DisconnectedContext”崩溃?【英文标题】:How to debug and solve a 'DisconnectedContext' crash? 【发布时间】:2011-01-04 03:48:56 【问题描述】:

我有一个 GUI 应用程序,它连接到传感器、收集数据并使用 BackgroundWorker 线程在后台处理数据。

就目前而言,我正在使用ProgressChanged 将数据发布到 GUI,这似乎一开始就运作良好。从那以后,我提高了数据速率并发现了一个问题;如果让软件运行几分钟,处理器使用量似乎会上升,直到它在我的机器上的两个内核上达到接近 100%,此时,我收到一条错误消息:

托管调试助手“DisconnectedContext”检测到“myapp.exe”中存在问题。附加信息:上下文 0xe2ba0 已断开连接。从当前上下文(上下文 0xe2d10)中释放接口。这可能会导致损坏或数据丢失。

我在网上阅读了一些内容,这些内容表明如果 GUI 应用程序无法足够快地发送消息,就会发生这种情况。我注意到如果我快速调整窗口大小(即泵出更多消息),我可以更快地引发同样的崩溃,这支持我认为的理论?

所以这里的问题是:

    是否有人同意我关于消息泵送的假设? 是否还有其他解释? 有什么方法可以证明吗(也许可以查看队列中的消息数量)? 这些糟糕的代码气味是否表明我正在以错误的方式处理这件事?

我们将不胜感激地接受任何建议。

【问题讨论】:

【参考方案1】:

这听起来像是一个非常具体的问题,我想这就是为什么还没有人回答,但我想我可以帮助解决问题 #3。

Spy++ 应该能够看到发送到您窗口的消息。我认为您可以使用它来观看消息泵到您的 GUI 并进行调整大小测试。如果您看到尝试处理的消息大量增加,则可能会证实您的假设。

顺便说一句,我听说您可以将主线程单元从 STAThread 更改为 MTAThread 以使这个 MDA 消失。

也许您可以修改您的应用程序以将传感器读数输出到文件中,或者以不同的机制将它们排队,而不是不断更新 GUI。 HTH。

【讨论】:

我尝试了 MTATHread 设置,它似乎只会增加一个偶尔的崩溃。相反,我采用了一种排队机制,并在部分显示代码中发现了一个错误,该错误过度填充了RichTextBoxControl。在这两者之间,看起来我已经解决了这个问题。感谢您的建议。 我已经多次看到这种情况发生了,这肯定是由于尝试从数据生产者线程向其侦听器发送太多ProgressChanged 请求而触发的。

以上是关于如何调试和解决“DisconnectedContext”崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试混合 cmd 和 powershell 脚本以解决特殊字符问题,如 & 和

iPhone 调试:如何解决“无法获取进程任务”?

如何调试最新chromium

在 Anaconda 下安装 OpenCV 后如何解决调试/发布冲突

如何解决错误“java.lang.IllegalArgumentException:无法初始化配置的调试器!”咂舌

如何调试最新chromium