【问题标题】:VB6 - debugging program to assist with compiled programVB6 - 协助编译程序的调试程序
【发布时间】:2014-04-15 07:51:40
【问题描述】:

早安,

我想知道是否有任何程序可以识别导致运行时错误 430 的组件。我知道足以使用 VB6 IDE 进行调试,但这是一个奇怪的情况,因为在 IDE 中不会发生错误。我检查了参考资料和组件,但它们都完好无损。因此,我正在寻找任何可以将自身附加到已编译程序的调试程序,并让我了解导致错误的 .DLL 组件或 .OCX 组件的更多信息。

提前致谢, 乔根

更新:我已阅读您的所有回复,感谢您提供的所有帮助。除了 spy++ 和 Process Monitor,我正在考虑使用 OllyDbg,它有一个名为“可执行模块”的视图,它基本上显示了正在调用哪些 DLL。但是,当我在其中运行程序时,它会冻结并且不会继续加载 GUI。任何熟悉 OllyDbg 并知道为什么会发生这种情况的人?

谢谢

乔根

【问题讨论】:

  • 感谢@HansPassant,但是在程序的根目录中没有检查出任何本地 DLL,并且我拥有本机代码的 DLL 是用二进制兼容性编译的。再次感谢您的参考。

标签: debugging dll vb6 ide ocx


【解决方案1】:

假设您拥有所有源代码,您可以将 VB6 EXE 以及 DLL 和 OCX 编译为包含符号调试信息的本机代码,以便创建 PDB 文件(勾选项目 > 属性 > 编译选项卡上的复选框)。然后您可以使用 WindDbg 或 Visual Studio .NET 来跟踪问题。

  • Visual Studio 2008 C++ Express 或 Professional 与您的 PDB。

这两种方式都需要将源代码在调试机器上的路径与在构建机器上的路径完全相同。那么最简单的方法就是在同一台机器上构建和调试。

【讨论】:

  • 我没有所有的本地代码,因为一些 DLL 来自外部公司,例如 Crystal reports 和 Fortis。感谢您的建议
  • 但是您可以调试您的代码并找出导致问题的第 3 方组件。然后检查它是否正确安装。
  • WinDbg 帮助我找到给出问题的 DLL,但我仍然遇到问题,但 @MarkJ 建议的速成课程帮助很大。我将进一步调试。我仍然会尝试显示建议,因为他表示感谢 Mark。
  • 我发现了问题。 .vbp 引用了另一个环境中的 DLL。在我工作的地方,我们有一个文件夹,其中所有程序都存储在该位置,供企业内的每个人使用,我们还有一个相同文件夹的副本,其中包含相同的程序,但源代码略有不同。出现此问题的原因是 FOLDER1 中的 .vbp 引用了 FOLDER2 中的 DLL。底线仔细检查您的参考资料并确保实施软件版本管理系统。
【解决方案2】:

将日志记录添加到应用程序可能更容易。
在不使用 VB6 IDE 的情况下进行调试是 possible,但这并不容易 - 我建议记录。

【讨论】:

  • 您的意思是使用“On Error Go To”语句进行日志记录,因为这会显示相同的 430 运行时错误消息。我需要知道哪个 dll 导致了错误。
  • 它将帮助您找到导致错误的确切代码行,并帮助您确定导致问题的 DLL / ocx。
【解决方案3】:

日志记录很好而且很好,但是在您知道从哪里开始之前,到处乱写日志可能会令人沮丧。

spy ++ 是我在调试旧 vb 代码和 PView 时使用的东西,它可以让我大致了解代码失败的地方。然后将日志记录添加到这些区域。

并检查 Hans Passands 的评论。它可能会为您节省一些麻烦。

【讨论】:

  • 我以前从未使用过 spy++,但我也会尝试这个选项。我只需要熟悉这个程序。感谢您的建议
【解决方案4】:

您可以从 sysinternals:www.sysinternals.com 下载“进程监视器”,将过滤器设置为不显示无用信息并调查不成功的结果,这是一项非常痛苦的工作,但机会很大。

【讨论】:

  • 是的,我目前正在尝试这个选项。我以前使用过进程监视器,但没有达到这个程度。我试过用它来显示这个过程在哪里不成功,但仍然没有办法。我会继续努力感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多