1

我有一个旧的 VB6 应用程序,它使用了很多 3rd 方组件,不仅是视觉组件,而且还用于音频处理、tcp/udp、VoIP 等......

当我将应用程序作为 EXE 运行时(例如不在 VB6 IDE 中),它有时会因 GPF 而崩溃。它发生在程序运行了几天之后,并且在周围没有人时发生。

不幸的是,用户截取了屏幕截图,但它通常没有任何有用的信息。崩溃的描述报告说,崩溃发生在ntdll.dll.

在此处输入图像描述

我的问题:

  1. 我需要什么工具来调试它?
  2. 我如何真正开始?
  3. 我有 VB6 中编译的 PDB 文件。该应用程序编译为Optimize for Fast Code. 在这种情况下我能对他们做什么?
4

1 回答 1

2

我会使用 ntsd 或 windbg ( link ),并在任一用户模式调试器下运行应用程序(如果您不熟悉,它们具有相同的命令 - ntsd 是控制台调试器,而 windbg 是 GUI 调试器)。两者都有很多命令行选项,但 ntsd appname.exe 足以开始使用。使用 .sympath 命令将调试器指向符号,您应该已经在路上了。当崩溃发生时,您可以检查变量和堆栈以找出可能丢失的内容。

顺便说一句 - 上面的错误是无效句柄错误,因此程序可能将过时或 NULL 句柄传递给 Windows 函数。调试器会告诉你更多。

于 2012-12-22T06:07:29.500 回答