【问题标题】:How to debug VB6 Automation errors如何调试 VB6 自动化错误
【发布时间】:2013-11-07 21:06:11
【问题描述】:

我在一个大型 VB6 应用程序上工作,我在解决关闭程序时出现的一些错误时遇到了很多困难。

所有这些错误都出现在最后一个代码行之后,因此我无法调试。我知道这些错误是“自动化错误”。我尝试在 Visual Studio 2010 中附加该过程,但出现以下错误: 在 VB6.EXE 中出现 0x7643c41f 的例外情况:0xC000008F:浮点不精确结果。

如何通过内存指针知道错误发生在哪个 DLL 中?

编辑:有关 WinDbg 的更多信息

(166c.2758): Access violation - code c0000005 (first chance)  
First chance exceptions are reported before any exception handling.  
This exception may be expected and handled.  
eax=01f8b004 ebx=00000800 ecx=01f16ce4 edx=00000000 esi=01f8b004 edi=006d0a68  
eip=729926a6 esp=0018f648 ebp=75850dfb iopl=0         nv up ei pl zr na pe nc  
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010246  
MSVBVM60!IID_IVbaHost+0x24066:  
729926a6 ff7174          push    dword ptr [ecx+74h]  ds:002b:01f16d58=????????  

【问题讨论】:

  • 不,但我知道程序想要访问一个不再存在的内存指针。我不想知道指针中的值是什么,而是什么 dll 试图访问这个指针。
  • VMMap 将显示 DLL 的位置。您可能会发现 0x7643c41f 在系统 DLL 中
  • 当您说“我尝试在 Visual Studio 2010 中附加该进程”时,这是否意味着您能够附加或无法附加?如果您能够附加,那么只需查看线程堆栈。
  • 是的,我可以附加到进程,但我没有堆栈跟踪,因为我的程序是在 VB6 中

标签: debugging vb6


【解决方案1】:

这部分引起了我的注意:

"Floating-point inexact result."

试试这个:

转到: 项目 > 项目属性 > 编译 > 高级优化

检查“删除浮点错误检查”和“允许未取整的浮点运算”框是否已打勾。如果已勾选,请取消勾选,保存并重新运行项目。这允许 Visual Basic 在浮点数据类型及其相关表达式导致编程环境崩溃之前检查它们是否存在问题。然后,您可以修复它发现的那些错误(例如除以零),而不是简单地跳过它们,并且当您对所有内容都已修复感到满意时,可以选择将优化设置重新设置。

【讨论】:

  • 你的程序中有子类化代码吗?尝试暂时删除它,看看是否仍然出现错误。
  • 不,我没有任何子类化代码。事实上,我收到的最后一条错误消息是在 VB6 虚拟机 dll 中,但我不知道如何才能看到 VB6VM dll 执行的代码行。所以我不知道这是这个DLL中的错误还是我们在dll中执行的代码......
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2020-05-25
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多