在发布模式下崩溃但在调试模式下不崩溃的 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 控件的主要内容,如果未能解决你的问题,请参考以下文章

此代码在调试模式下工作,但在发布模式下不工作 c++

选择发布模式时应用程序崩溃但在调试模式下完美运行

应用程序在发布时崩溃,但在调试模式下工作正常

UWP XAMARIN 在 RELEASE 模式下崩溃(但在调试中工作良好)

ios 应用程序在调试模式下完美运行,但在发布时崩溃

Xamarin App 在调试时运行,但在发布时崩溃