Vb6 如何调试GPF崩溃?

Vb6 如何调试GPF崩溃?,vb6,crash,crash-dumps,Vb6,Crash,Crash Dumps,我有一个旧的VB6应用程序,它使用了很多第三方组件,不仅是视频,还用于音频处理、tcp/udp、VoIP等 当我以EXE方式运行应用程序时(例如,不在VB6 IDE中),它有时会因GPF而崩溃。它发生在程序运行了几天之后,发生在周围没有人的时候 不幸的是,用户截图,但它通常没有任何有用的信息反正。崩溃描述报告崩溃发生在ntdll.dll中 我的问题是: 我需要什么工具来调试它 我该如何开始呢 我有VB6中编译的PDB文件。该应用程序被编译为优化快速代码。在这种情况下,我能对他们做些什么 我会使

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

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

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

我的问题是:

  • 我需要什么工具来调试它
  • 我该如何开始呢
  • 我有VB6中编译的PDB文件。该应用程序被编译为
    优化快速代码
    。在这种情况下,我能对他们做些什么

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


    顺便说一句,上面的错误是无效句柄错误,因此程序可能向windows函数传递了过时或空句柄。调试器将告诉您更多信息。

    使用日志记录找出代码的哪一部分导致崩溃?@MarkJ我的代码中没有发现错误。它必须发生在运行时或第三方控件中。