我维护一个用 VB6 编写的旧应用程序。在客户端的环境中,它会引发我无法在调试器下重现的运行时错误。有什么方法可以获取堆栈跟踪或错误位置吗?
我的意思是,不要像这里那样在整个代码中放置跟踪语句,也不需要像这里那样添加错误处理程序来记录每个过程。
这似乎是一个简单的问题。对不起。我只是不太了解VB6。考虑到它被(或曾经)使用的广泛程度,谷歌搜索出任何信息是非常困难的。
我维护一个用 VB6 编写的旧应用程序。在客户端的环境中,它会引发我无法在调试器下重现的运行时错误。有什么方法可以获取堆栈跟踪或错误位置吗?
我的意思是,不要像这里那样在整个代码中放置跟踪语句,也不需要像这里那样添加错误处理程序来记录每个过程。
这似乎是一个简单的问题。对不起。我只是不太了解VB6。考虑到它被(或曾经)使用的广泛程度,谷歌搜索出任何信息是非常困难的。
尝试编译到 pcode 看看是否仍然出现错误。这是 VB6 的调试模式和运行时之间的一个共同区别。我曾经编译为本机并遇到仅在运行时发生的错误。当我切换到 pcode 时,我发现错误消失了,或者更可能是一个反映实际问题的新错误出现了,并且在调试模式下更容易重现。
如果尽管如此,您仍然遇到错误,那么我真的建议您从程序堆栈的顶部开始,并使用 Maero 的建议向下工作
On Error Goto Handler
<code>
Exit <routine>
Handler:
Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description
这是一种痛苦,但没有真正的解决方法。
VB6 调试器有时很不稳定。有替代方案。
如果选中项目属性/编译选项卡上的“创建符号调试信息”复选框,则可以在 Visual Studio 中进行调试,就像在本机 C++ 应用程序中一样。
已经有一段时间了,但我认为没有一种方法可以在不添加错误处理程序并输出适当消息的情况下在 VB6 应用程序中获取堆栈跟踪。有一些第三方工具会为整个应用程序添加错误处理,但我相信它只是在整个代码中添加了“On Error Goto”错误处理程序。
顺便说一句,我在 VB6 应用程序中遇到的一个更隐蔽的运行时错误是当我在控件的属性中使用客户端 PC 上不存在的字体时。这会生成一个无法在代码中捕获的运行时错误,因此我添加的任何错误处理都没有发现该错误。我终于偶然遇到了它。希望这可以帮助。