【问题标题】:How can I debug an application crash in Win7 after it's happened?应用程序崩溃发生后如何在 Win7 中调试?
【发布时间】:2011-02-22 20:23:48
【问题描述】:

我有一个 Visual Basic 6 应用程序,我最近更改为使用我在 Visual Studio 2008 中编写的几个 C++ DLL。该应用程序在我的 PC 上运行良好,但是当我们将它安装在我们的一个测试中时PC 在关机时往往会崩溃 - 我们会看到 Win 7 消息“您的应用程序已失败”或其他任何内容。

我知道 Win 7 存储可用于分析崩溃的数据。我已经从构建中获得了源代码和 .PDB 文件,所以我应该能够使用它,但我无法弄清楚 Win 7 将崩溃数据存储在哪里。事件查看器显示崩溃但没有任何数据并且目录 C:\Windows\Minidump 不存在。

崩溃文件放在哪里?

【问题讨论】:

  • 您的问题更适合在 serverfault.com 或 superuser.com 上提问
  • 为什么? StackOverflow 的编程问题。
  • 有什么原因不能切换到 VB.net?这是一个依赖问题吗? (我知道 Visual Studio 2008 有一个运行时,但也许你没有使用它?)也就是说,关于 C++ 的问题,我就在你身边,所以我一定会发布或交叉 -如果我发现好东西就发帖...(可能是 watson + minidump + 符号等,我在尝试缺乏自虐时忘记了)
  • 注意:如果配置为在线查找解决方案,则会在崩溃时弹出一个屏幕。如果您没有点击取消而是等待它,则存在是否可以发送的问题。如果您在此处暂停并获取“更多信息”,则对话框的一部分会显示与崩溃相关的 3 个文件名。带有 *.mdmp 扩展名的那个有你的 minidump。 (当然,对话框关闭的第二秒 MS 会删除它,所以快点抓住它!)
  • 这是 8 年前的事了,但 VB6 与 VB.net 不同,它需要完全重写。

标签: c++ visual-studio vb6 windows-7 crash


【解决方案1】:

为什么不让你的程序在崩溃发生时将 minidump 保存在任何你想要的地方?我对VB不熟悉,但尝试使用SetUnhandledExceptionFilter()MiniDumpWriteDump()

【讨论】:

  • 您不想在用户的计算机上创建迷你转储以在不安装开发工具(如 SDK)的情况下使用任何可执行程序吗?你会怎么做?
【解决方案2】:

Microsoft 在此处提供可追溯到 Vista Service Pack 1 的文档: https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx

有一个包含 4 个子值的注册表项可控制一般崩溃:

# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

DumpType   # 1 = mini-dump, 2 = full dump, 0 = custom dump
DumpCount  # Maximum number of dump files to keep before purging
DumpFolder # Full path to folder to store dump files (no trailing slash)
DumpFlags  # Usually 0, flags only used if DumpType is 0

一旦这些注册表值到位,无论显示的任何对话框发生什么情况,都应立即写入崩溃文件。

注意: 带有可执行名称的注册表子键只能用于控制一个指定进程的崩溃行为。

【讨论】:

    【解决方案3】:

    您甚至可以使用 carsh 报告机制并获取本地保存的转储文件,然后使用 Visual Studio 对其进行调试。 Visual C++ 中有很多免费可用的资源,但在 VB 中却不多。

    【讨论】:

    • 博士。也许是沃森?好的,因此最终用户的机器上可能需要一些工具来执行此操作。哪一个?应该如何设置?
    【解决方案4】:
    • 为崩溃获取 minidump
    • 获取WDK,Using Debugging Tools for Windows

    • 使用 Windbg 打开故障转储

    • 使用命令 !analyze

      !analyze 扩展显示有关当前异常或错误检查的信息。

    • 阅读有关窗口调试的更多信息

    创建转储:

    您可以通过在运行中输入命令“windbg -I”将windbg配置为默认调试工具。

    Dr. Watson 工具也可以为您做到这一点。

    【讨论】:

    • 您是说用户必须将 WinDbg 配置为默认调试工具(或 Dr Watson)才能创建故障转储? Windows 默认不这样做吗?
    • 有两种方法:1.使用Crash Dump来事后分析问题2.使用windbg作为默认调试器,当你的进程崩溃时它会自动打开windbg,你可以抓住罪魁祸首
    • 您也可以通过编程方式创建转储...阅读此线程stackoverflow.com/questions/1547211/…
    • 获取 minidump 以防崩溃 如果最终用户计算机上没有 SDK,则没有特殊工具。你是怎么做到的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多