调试Visual Basic运行时错误5

时间:2014-04-17 06:50:29

标签: vb6 windbg

我有一个Visual Basic 4 32位应用程序,导致

Run-time error '5':
Invalid procedure call

我启动WinDbg并执行

sxe *

打破所有例外。但是,它会在不破坏调试器之前显示消息。

如果我在消息发生时中断,则callstack不是很有用。在出现问题时,有没有一个技巧可以在Visual Basic 4应用程序上进行攻击?

问题常见问题:

  • 您可以在IDE中运行它吗? 是的,我可以,当我这样做时,我可以解决这个问题。但是,我想在最终用户运行应用程序时获取更多信息,这样我就不需要重现它了。

  • 如果您发现错误原因,您想做什么? 嗯,这取决于错误的类型。也许我可以解决它,也许我不能。通常我会从WinDbg中获得一些非常有用的信息。

  • 何时发生错误?
    当用户按下表单上的关闭按钮时,它会重复出现。

  • 申请是做什么的? 哦,这是一个很好的问题。我不知道。它使用RS232通信,但尚未涉及。

  • 您对用户可以输入的数据了解吗? 我几乎一无所知。在这种特殊情况下,没有必要输入数据。

2 个答案:

答案 0 :(得分:5)

错误来自VB虚拟机,而不是来自API。 我无法看到WinDbg如何在VB4上有用,它被解释并且在P-Code中。

Visual Basic运行时错误5表示以下之一:

  • 输入了无效的集合或属性名称。
  • out参数为NULL。
  • 该值不是受支持的值之一或超出支持的范围。
  • 该属性为只读。
  • 创建对象后无法更改属性。
  • 输入了无效索引。

如果它是API调用,则VB使用LoadLibraryGetProcAddress

某些控件随着时间的推移丢失了默认值,这可能会导致第一个。

如果现代技术超过了计划的预期,第三种情况就会发生,例如:磁盘空间。

另见(抱歉没有链接,它们在我的硬盘上)

Q131007 HOWTO: Use Windows NT WinDbg.exe with Visual Basic(对于NT 3.5而言)

Q166275 HOWTO: Debug a Native Code Visual Basic Component in VC++(在调试器中讨论VB中可以看到的内容)

VB4无法制作符号

答案 1 :(得分:0)

当用户按下关闭按钮时发生错误我假设有一个(非常紧的)循环运行,它没有收到预期的数据(可能是一个空字符串)

我希望那个循环不断地从RS232设备读取数据,并且RS232在关闭的表格上,即使它没有涉及连接可能已经打开和轮询

在关闭表单之前,您应该做的是退出该循环并关闭与RS232设备的连接。您可以在Form_Unload()事件中执行此操作,但也可能必须在此之前执行此操作,因此您可能必须在关闭按钮的代码中执行此操作...确保用户赢了“是通过

使用X来关闭表格

我个人会在IDE中运行该程序,这将直接指向代码的错误部分,让您有机会观察所涉及的变量的内容并控制状态...这比根据WinDbg的数据进行猜测