运行时错误堆栈跟踪或VB6中的位置

时间:2009-07-08 15:34:19

标签: debugging vb6 error-handling stack-trace production-environment

我维护一个用VB6编写的旧应用程序。在客户端环境中,它会引发运行时错误,我无法在调试器下重现这些错误。有没有办法获得堆栈跟踪或错误位置?

我的意思是,不要在here之类的代码中放置跟踪语句,也不要添加错误处理程序来记录here等每个过程。

这似乎是一个简单的问题。 抱歉。 我只是不太了解VB6。 考虑到它(或曾经使用过的)的广泛程度,很难对任何信息进行谷歌搜索。

4 个答案:

答案 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调试器有时会出现问题。还有其他选择。

  • 您可以尝试使用Microsoft的免费独立调试器Windbg。编译您的VB6没有优化和“创建符号调试信息”(即创建PDB文件),您将能够调试。以下是微软关于将Windbg与VB6一起使用的2006 blog post,以及另一位对Windbg进行简要介绍的微软人员的2004 blog post
  • 您还可以将Visual Studio 2008调试器与VB6和PDB文件一起使用,例如: Visual C++ Express Edition(免费)。有关详细信息,请参阅this
  • Windbg和Visual Studio expect源代码在调试机器上的路径与在构建VB6时在构建机器上完全相同。最简单的方法是在同一台机器上构建和调试。否则,您可能需要fiddleSUBST一起创建虚拟驱动器 - 或者我被告知严肃的方法是使用Symbol Server

答案 2 :(得分:2)

如果选中Project Properties / Compile选项卡上的“Create Symbolic Debug Info”复选框,则可以像在原生C ++应用程序中一样在Visual Studio中进行调试。

答案 3 :(得分:1)

已经有一段时间了,但我认为有一种方法可以在VB6应用程序中获取堆栈跟踪,而无需添加错误处理程序并输出相应的消息。有一些第三方工具会为整个应用程序添加错误处理,但我相信它只是在整个代码中添加了“On Error Goto”错误处理程序。

除此之外,我在VB6应用程序中遇到的一个更隐蔽的运行时错误是当我在控件的属性中使用客户端PC上不存在的字体时。这会生成一个无法捕获到代码中的运行时错误,因此我添加的任何错误处理都没有发现错误。我终于偶然遇到了它。希望这会有所帮助。