代码之家  ›  专栏  ›  技术社区  ›  Tomek Szpakowicz

运行时错误StackTrace或vb6中的位置

  •  3
  • Tomek Szpakowicz  · 技术社区  · 15 年前

    我维护了一个用vb6编写的旧应用程序。在客户机环境中,它会引发运行时错误,我无法在调试器下重现这些错误。是否有任何方法可以获取stacktrace或错误位置?

    我的意思是,在代码中不放跟踪语句 here 或者添加错误处理程序,以便将日志记录到 here .

    这似乎是一个简单的问题。 对不起的。 我只是不太了解VB6。 考虑到信息的使用范围(或曾经的使用范围),用谷歌搜索任何信息都是非常困难的。

    4 回复  |  直到 6 年前
        1
  •  3
  •   RS Conley    15 年前

    尝试编译到pcode,看看您是否仍然得到错误。这是vb6的调试模式和运行时之间的一个常见区别。我曾经编译到本机,遇到了只在运行时发生的错误。当我切换到pcode时,我发现要么错误消失了,要么更可能是一个反映实际问题的新错误突然出现,并且更容易在调试模式下重现。

    如果尽管如此,您仍然得到错误,那么我真的建议从您的过程堆栈的顶部开始,使用Maero的建议

    On Error Goto Handler
    <code>
    Exit <routine>
    Handler:
    Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description
    

    这是一种痛苦,但没有真正的方法来解决它。

        2
  •  3
  •   Community Navdeep Singh    7 年前

    vb6调试器有时会出现问题。还有其他选择。

    • 你可以试试 Windbg ,来自Microsoft的免费独立调试器。在没有优化和“创建符号调试信息”(即创建PDB文件)的情况下编译您的VB6,您将能够进行调试。这里有一个 2006 blog post 由一个微软人介绍如何将windbg与vb6结合使用,以及 2004 blog post 由另一个微软人简要介绍了windbg。
    • 还可以将Visual Studio 2008调试器与vb6和pdb文件一起使用,例如 Visual C++ Express Edition (免费)。见 this 了解更多详细信息。
    • windbg和Visual Studio expect 源代码在调试计算机上的路径与在生成VB6时在生成计算机上的路径完全相同。最简单的方法是在同一台机器上构建和调试。否则你可能需要 fiddle 具有 SUBST 创建虚拟驱动器——或者我被告知,真正的方法是使用 Symbol Server .
        3
  •  2
  •   Ant    15 年前

    如果在ProjtProjts/Cuppl选项卡上检查“创建符号调试信息”复选框,那么您可以在VisualStudio中调试,就像您是本地C++应用程序一样。

        4
  •  1
  •   Bob Mc    15 年前

    已经有一段时间了,但我认为没有一种方法可以在不添加错误处理程序和输出适当消息的情况下,在VB6应用程序中获取堆栈跟踪。有一些第三方工具可以向整个应用程序添加错误处理,但我相信它只是在整个代码中添加了“on error goto”错误处理程序。

    顺便提一句,我在vb6应用程序中遇到的一个更阴险的运行时错误是,当我使用控件属性中客户端PC上不存在的字体时。这会生成一个不能被代码捕获的运行时错误,所以我添加的错误处理量从来没有发现过错误。我终于偶然发现了。希望这有帮助。