在发布模式下崩溃但在调试模式下不崩溃的 ActiveX 控件
Posted
技术标签:
【中文标题】在发布模式下崩溃但在调试模式下不崩溃的 ActiveX 控件【英文标题】:ActiveX control that crashes in release mode but not in debug mode 【发布时间】:2011-05-05 23:10:14 【问题描述】:我继承了用 c++/c 编写的 activeX 控件的维护,该控件在发布模式下崩溃但在调试模式下不崩溃。
当嵌入网页时,此 AX 控件在发布模式下触发访问冲突,但在调试模式下不会触发
以下是 IE 8 的详细信息
Description:
Stopped working
Problem signature:
Problem Event Name: APPCRASH
Application Name: iexplore.exe
Application Version: 8.0.7601.17514
Application Timestamp: 4ce79912
Fault Module Name: mymodule.OCX
Fault Module Version: 13.0.0.771
Fault Module Timestamp: 4dc325f9
Exception Code: c0000005
Exception Offset: 003ebc80
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
有人对如何解决这个问题有建议吗?
【问题讨论】:
提高编译器的警告级别...并注意警告。 【参考方案1】:在您的发布版本中生成调试符号。然后就可以调试崩溃了。
或者,不要等待崩溃发生,而是在执行导致崩溃发生的步骤之前附加到进程。在 VS 异常对话框中,让 VS 在引发访问冲突时立即停止(调试 | 异常 | Win32 异常 | c0000005)。然后复制;此时,VS 应该会在 AV 发生时显示一个消息框。
如果崩溃每次都在同一个地方重现,应该很容易诊断。
【讨论】:
【参考方案2】:因为我浪费了很多时间来寻找正确的解决方案,所以在这里分享一下:
传递给 CreateControl 的许可字符串必须是使用 SysAllocString 分配的,否则您的许可 ActiveX 控件可能会崩溃。在我的项目中,这只是在发布模式下......不知道为什么它在调试模式下工作。
间接找到解决方案here。
【讨论】:
以上是关于在发布模式下崩溃但在调试模式下不崩溃的 ActiveX 控件的主要内容,如果未能解决你的问题,请参考以下文章