Vb6 调试Visual Basic运行时错误5

Vb6 调试Visual Basic运行时错误5,vb6,windbg,Vb6,Windbg,我有一个Visual Basic 4 32位应用程序,它会导致 Run-time error '5': Invalid procedure call 我启动WinDbg并执行 sxe * 打破所有例外。但是,它在显示消息之前不会中断调试器 如果在发送消息时中断,则调用堆栈不是很有用。在出现问题时,是否有办法闯入Visual Basic 4应用程序 常见问题解答: 您能在IDE中运行它吗? 是的,我可以,而且当我这样做的时候,我可能可以修复这个错误。但是,我希望在最终用户运行应用程序时获得更

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

Run-time error '5':
Invalid procedure call
我启动WinDbg并执行

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

如果在发送消息时中断,则调用堆栈不是很有用。在出现问题时,是否有办法闯入Visual Basic 4应用程序

常见问题解答:

  • 您能在IDE中运行它吗?
    是的,我可以,而且当我这样做的时候,我可能可以修复这个错误。但是,我希望在最终用户运行应用程序时获得更多信息,这样我就不需要复制它了

  • 如果找到错误的原因,您想做什么?
    这取决于错误的类型。也许我能修好,也许我不能。通常我会从WinDbg获得一些非常有用的信息

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

  • 应用程序的作用是什么?
    哦,这是个好问题。我不太清楚。它使用RS232通信,但尚未涉及

  • 您知道用户可以输入的数据吗?
    我几乎一无所知。在这种特殊情况下,不需要输入数据


错误来自VB虚拟机,而不是API。 我看不出WinDbg在VB4上有多大用处,VB4是解释的,并且是P代码

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

  • 输入的集合或属性名称无效
  • out参数为NULL
  • 该值不是支持的值之一,或不在支持的范围内
  • 该属性是只读的
  • 创建对象后,无法更改属性
  • 输入了无效的索引
如果是API调用,VB使用
LoadLibrary
GetProcAddress

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

第三种情况可能发生在现代技术超出程序预期的情况下,例如磁盘空间

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

(新台币3.5元)

(讨论在VB调试器中可以看到的内容)


VB4无法生成符号

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

我预计该循环将持续从RS232设备读取数据,并且RS232处于正在关闭的状态,即使它不涉及连接可能已经打开并轮询

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


就我个人而言,我会在IDE中运行该程序,这将直接指向代码中出错的部分,并让您有机会查看相关变量的内容和控制状态。。。这比根据WinDbg的数据猜测要快得多

你能在IDE中运行它吗?如果没有,如果发现错误的原因,您想做什么?错误是否总是发生,或者有时运行正常?错误发生的时间、程序启动的时间、执行特定操作的时间、关闭的时间。。。应用程序做什么,它是否与文件/系统文件/注册表一起工作,它是否使用串行(rs232)通信,它是否使用以太网通信?你知道用户可以输入的数据吗?我看不出windbg在vb4上有什么用处,vb4是解释的,并且是p代码。为什么不使用VB4调试器呢。有运行时符号,vb6可以制作应用程序的符号文件,也许vb4也可以。Invb6一个环境变量告诉VB6将符号放入应用程序,link=/pdb:none,但您仍然必须选择打开符号。错误来自VB虚拟机,而不是API。@Hrqls:我已经更新了问题。它是16位还是32位VB4应用程序。虚拟机似乎没有符号。@tonybd:它是32位的。我同意这可能是P代码的事情,我没有机会,除非我升级到VB6。如果你回答这个问题,我可以接受。注:39年前,比尔·盖茨和保罗·艾伦提出了这个错误信息。