我有一个Visual Basic 4 32位应用程序,导致
Run-time error '5':
Invalid procedure call
我启动WinDbg并执行
sxe *
打破所有例外。但是,它会在不破坏调试器之前显示消息。
如果我在消息发生时中断,则callstack不是很有用。在出现问题时,有没有一个技巧可以在Visual Basic 4应用程序上进行攻击?
问题常见问题:
您可以在IDE中运行它吗? 是的,我可以,当我这样做时,我可以解决这个问题。但是,我想在最终用户运行应用程序时获取更多信息,这样我就不需要重现它了。
如果您发现错误原因,您想做什么? 嗯,这取决于错误的类型。也许我可以解决它,也许我不能。通常我会从WinDbg中获得一些非常有用的信息。
何时发生错误?
当用户按下表单上的关闭按钮时,它会重复出现。
申请是做什么的? 哦,这是一个很好的问题。我不知道。它使用RS232通信,但尚未涉及。
您对用户可以输入的数据了解吗? 我几乎一无所知。在这种特殊情况下,没有必要输入数据。
答案 0 :(得分:5)
错误来自VB虚拟机,而不是来自API。 我无法看到WinDbg如何在VB4上有用,它被解释并且在P-Code中。
Visual Basic运行时错误5表示以下之一:
如果它是API调用,则VB使用LoadLibrary
和GetProcAddress
。
某些控件随着时间的推移丢失了默认值,这可能会导致第一个。
如果现代技术超过了计划的预期,第三种情况就会发生,例如:磁盘空间。
另见(抱歉没有链接,它们在我的硬盘上)
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的数据进行猜测