错误信息:正被停用的激活上下文不是最近激活的

错误信息:正被停用的激活上下文不是最近激活的

作者:BlogUpdater |  时间:2018-08-26 |  浏览:4086 |  评论已关闭 条评论

VS已经为应用程序调试提供了非常出色的支持,程序出现各种意外问题,拿起VS做一次单步调试,基本可以定位到出问题的点上。

符合预期的调试
例如,我们在一个按钮点击事件处理函数中,发生了一个内存违规事件,用VS调试器运行应用程序,我们会看到如下的错误提示:

上述错误的原因是:我们尝试写入数据岛一个地址为0的内存空间上,Windows检测到此错误,并报告了一个内存违规。

更多实例
更多的情况下,我们的内存违规事件可能出现在如下的几种场景中
1) 自定义消息处理例程

2) 非UI回调例程

3) UI回调例程

4) 工作线程

今天碰到的GPF在调试过程中,VS未能如上面所述的那样快速给出实际的问题崩溃点,而是出现了如下的错误提示:
正被停用的激活上下文不是最近激活的

代码崩溃点

这就有点摸不着头脑了。

触发场景
经过程序的运行路径跟踪,逐渐缩小了范围。最终定位到问题:在另外一个独立DLL中重写了ListCtrl类,传入了一个用于排序自定义函数指针并在主程序模块中显式的调用了SortItems。
倘若SortItems的调用由ListCtrl DLL模块触发(即点击列头排序),则不会出现此错误提示(当然,会出现内存访问违规,但这也给出了清晰的解决问题的线索)。

原因分析
目前还没弄明白。

标签:

相关推荐

评论已关闭。