【发布时间】:2012-08-31 03:01:01
【问题描述】:
我目前正在使用一个相当老的 Borland C++ 应用程序,它使用 ActiveX 组件来绘制一些图形。在应用程序中使用 ActiveX 组合的多个窗口。可以随时打开 - 这些可以显示相同的图形(不同的缩放系数等),也可以显示不同的图形。
应用程序是定位的,ActiveX是绘制和显示不同单元的位置。
Borland 应用程序大约每秒 10 次获得一个新位置,并找出哪些表单(及其 ActiveX)需要知道更新后的位置才能绘制它。这已经进行了很长时间,但我不得不在 ActiveX 中为新版本的产品做一些更改。
大约一年前,我还不得不对组件进行一些小改动,我发现应用程序可能会以某种状态结束,从而导致组件中出现“索引越界”错误。这样做的结果不是显示错误或程序终止,而是应用程序开始使用大量内存 - 并且一直在快速增长。在某些时候它停止了,出现错误的组件只是停止显示任何东西(停止绘制本身)。
现在,随着我最近所做的更改,我遇到了同样的问题,其中一个组件似乎出现错误,没有显示出来,而是它没有重新绘制本身,并且内存使用量越来越大-高的。在某些 PC 上,似乎引发了访问冲突 - 这表示错误发生在 OCX 中,但在我开发的 PC 上,我无法以任何方式获得此访问冲突。
我也无法准确追踪错误发生的时间 - 即导致错误的原因。我可以在 15 分钟内连续运行 10 次相同的设置,有时会发生内存使用增加和组件错误,其他时候什么也没有发生,并且在整个持续时间内运行正常。
由于它是一个 OCX,它是使用 regsvr32 注册的,因此在代码方面不是主应用程序的一部分。因此我不能使用断点并以这种方式调试它。
我很确定组件内部发生了一些错误,没有传递,所以我看不到它是什么。
那么有人知道我该如何调试吗?我能否以某种方式让 OCX 记录发生的任何错误,或者让它显示错误,或者我能做什么?
任何帮助将不胜感激 - 3 天以来一直在尝试追踪错误,但没有任何结果。
【问题讨论】:
-
你能修改或构建ocx吗?如果您有 ocx 的 PDB 文件,则可以对其进行调试 - 只需将调试器附加到正在运行的进程即可。
-
我确实可以修改和构建ocx。我完全不熟悉 MFC 和 OCX,所以我不太清楚如何使用 PDB 文件并将调试器附加到正在运行的进程?
标签: c++ debugging mfc error-handling activex