我维护一个用VB6编写的旧应用程序。在客户端环境中,它会引发运行时错误,我无法在调试器下重现这些错误。有没有办法获得堆栈跟踪或错误位置?
我的意思是,不要在here之类的代码中放置跟踪语句,也不要添加错误处理程序来记录here等每个过程。
这似乎是一个简单的问题。 抱歉。 我只是不太了解VB6。 考虑到它(或曾经使用过的)的广泛程度,很难对任何信息进行谷歌搜索。
答案 0 :(得分:3)
尝试编译到pcode并查看是否仍然出现错误。这是VB6的调试模式和运行时之间的一个常见区别。我曾经编译成本机并遇到只在运行时发生的错误。当我切换到pcode时,我发现错误消失了,或者更可能是一个新的错误,它反映出真正的问题,并且在调试模式下更容易重现。
如果你仍然得到错误,那么我真的建议你从程序堆栈的顶部开始,然后使用Maero的建议
On Error Goto Handler
<code>
Exit <routine>
Handler:
Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description
这是一种痛苦,但没有真正的方法。
答案 1 :(得分:3)
VB6调试器有时会出现问题。还有其他选择。
答案 2 :(得分:2)
如果选中Project Properties / Compile选项卡上的“Create Symbolic Debug Info”复选框,则可以像在原生C ++应用程序中一样在Visual Studio中进行调试。
答案 3 :(得分:1)
已经有一段时间了,但我认为有一种方法可以在VB6应用程序中获取堆栈跟踪,而无需添加错误处理程序并输出相应的消息。有一些第三方工具会为整个应用程序添加错误处理,但我相信它只是在整个代码中添加了“On Error Goto”错误处理程序。
除此之外,我在VB6应用程序中遇到的一个更隐蔽的运行时错误是当我在控件的属性中使用客户端PC上不存在的字体时。这会生成一个无法捕获到代码中的运行时错误,因此我添加的任何错误处理都没有发现错误。我终于偶然遇到了它。希望这会有所帮助。