问题标签 [minidump]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
189 浏览

c++ - 什么可能导致小型转储反汇编与二进制反汇编不同?

我有一个崩溃的小型转储。在崩溃点,有一些看起来不应该成功运行的奇怪代码。就像是:

AnObject::AFunction 是返回 bool 的成员函数。所以结果应该以 0 或 1 的形式存储在 eax 中。此时取消对 eax 的引用是没有意义的。

我反汇编了相应的二进制文件,确实,这个函数的代码不同:

为什么 minidump 反汇编代码与实际的二进制反汇编代码不同?

0 投票
0 回答
112 浏览

debugging - 是否可以“转储”正在运行的进程并在另一台 PC 上恢复/继续?

我们在客户那里遇到了不可重现的问题(某些数据显示不正确)。客户自己每天都会遇到几次问题,但我们无法在内部重现问题。

一旦客户出现问题,我们可以使用远程调试来调查运行过程,但这需要开发人员PC通过大量VPN软件连接到客户PC。实际上,这几乎是不可能的,因为客户不希望我们直接连接到运行应用程序的服务器(通常还涉及远程桌面或 Citrix 系统)。

我知道您可以制作一个正在运行的进程的 MiniDump 以在调试器中对其进行调查,但是您无法继续该进程以查看实际情况。

是否有可能对进程进行转储,将转储复制到开发人员 PC,然后在开发人员 PC 上继续该进程?应用程序是本机非托管 C++ 应用程序。

当然,所有与数据库连接、网络连接、文件等相关的逻辑都将不可用,但在这种情况下,我主要对内部逻辑感兴趣。

如果这是不可能的,这通常可以使用虚拟机来代替吗?

0 投票
2 回答
9708 浏览

kernel - 如何使用 WinDbg 创建内核转储

我正在使用 WinDbg 为 Windows 调试内核模式设备驱动程序。是否可以按需创建小型转储?

我的意思是,我的一个断点被击中,系统停止了。我想创建一个小型转储(假设只有堆栈)。是否有为此的 WinDbg 关键字?

提前致谢

0 投票
1 回答
2987 浏览

c++ - 在进程外使用 MiniDumpWriteDump 时如何获取异常信息?

当使用 MiniDumpWriteDump 函数在 Windows 上创建进程的核心转储时,建议(例如herehereMiniDumpWriteDump从另一个“看门狗”进程运行,因为从同一进程中调用它可能无法正常工作。

目前,我们的应用程序在一个未处理的异常调用它(我们从一个看门狗线程执行它)。由于我们有时会遇到无法正常工作的问题,因此我们希望将其移至单独的进程。

现在,通知另一个进程开始写入转储是微不足道的(只需使用一个事件,信号量,你可以命名它)但是我如何将LPEXCEPTION_POINTERS我为我注册的回调函数获得的信息传递SetUnhandledExceptionFilter给另一个进程,以便它可以传递给MiniDumpWriteDumpsExceptionParam参数?

0 投票
0 回答
1086 浏览

c++ - MiniDumpWriteDump 和写入管道会导致死锁

在我的应用程序中,我Unnamed Pipes用作函数的输出MiniDumpWriteDump- 我不想实际创建文件,只需将 MiniDump 写入内存缓冲区。

从另一个线程调用从管道读取字节的方法。当我调用MiniDumpWriteDump函数时,ReadFileandMiniDumpWriteDump函数永远不会返回。

我试图检查是否是句柄错误或管道尺寸太小的问题,但是当我使用简单的WriteFile功能时,一切似乎都很好(即使管道尺寸小于写入的字符串)。

这是我的一段代码:

0 投票
1 回答
1984 浏览

windows - 来自另一个进程的 MiniDumpWriteDump

我想使用 MiniDumpWriteDump 为我的应用程序生成崩溃日志。Microsoft 建议从另一个进程执行转储,这是我正在尝试做的。我遇到的问题是将PEXCEPTION_INFORMATION结构从父进程传递给子进程。问题是父进程拥有这个结构的内存,我需要把它交给孩子。我找到了这篇文章

在进程外使用 MiniDumpWriteDump 时如何获取异常信息?

并且接受的答案说“指针在看门狗进程的上下文中无效并不重要。” 这让我相信我可以简单地将PEXCEPTION_INFORMATION我的未处理异常过滤器接收到的指针传递给子进程,Windows 会从父进程中读取它。这没有发生,所以我真的不知道该怎么做,此时子进程崩溃,大概是因为 Windows 试图访问这个内存,就好像它属于孩子一样。我显然在这里遗漏了一些东西,但我不确定是什么。我使用管道将数据发送到子进程,上述问题的答案说使用内存映射文件有效,但我不确定为什么,或者我是否正确理解了答案。

0 投票
5 回答
12307 浏览

windows - 在 Windows 7 上安装调试工具以分析小型转储

我一直在尝试安装“调试工具”,以便尝试将转储文件分析为服务器崩溃(Windows Server 2008 R2)。

我过去曾经这样做过,但我找不到如何安装/定位 Windows 7 的调试工具。

我已阅读此知识库文章: http: //support.microsoft.com/kb/315263

然后,我尝试从以下文章 ( http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx ) 下载“Windows 调试工具”。我选择了“为 Windows 安装调试工具作为独立组件”,下载文件并安装。

它确实安装成功,但我仍然找不到文件。这对我来说似乎是一个愚蠢的问题,但我无法以任何方式找到调试工具!我什至尝试下载提到的 Windows 7 调试工具 ( http://www.microsoft.com/en-us/download/details.aspx?id=8279 ),但还是找不到它们!

任何帮助将非常感激

0 投票
0 回答
147 浏览

c++ - C++ 禁用缓冲区溢出框

我的问题是,在应用程序崩溃期间它会弹出缓冲区溢出消息,我正在使用 minidumps 设置未处理的异常过滤器,这足以使程序简单地崩溃并关闭而不是弹出消息。

我已经测试了应用过滤器后立即取消引用 NULL 指针的程序,并且它在服务器机器(程序设置为运行的地方)上工作,尽管即使使用过滤器,应用程序处于发布模式并且没有定义调试,仍然会弹出消息。

这个问题非常严重,因为我们有另一个应用程序在每次崩溃时自动重新启动它,这不会发生,因为在崩溃时会显示一个消息框而不是程序关闭,它是一个服务器,它应该没有停机时间,也是由于没有创建 .dmp 文件的消息框。

0 投票
1 回答
2545 浏览

delphi - 如何在 EExternal 异常期间获取 EXCEPTION_POINTERS?

我如何获得EXCEPTION_POINTERS,即两者:

  • PEXCEPTION_RECORD
  • PCONTEXT

EExternal异常期间的数据?

背景

当 Windows 抛出异常时,它会传递一个PEXCEPTION_POINTERS; 指向异常信息的指针:

Delphi向我抛出EExternal异常时,它只包含一半的信息,PEXCEPTION_RECORD唯一的:

EExternal异常期间,我如何同时获得两者?

示例用法

我正在尝试使用MiniDumpWriteDumpDelphi 的函数编写一个 Minidump。

该函数有几个可选参数:

在基本层面上,我可以省略三个可选参数:

它成功了。缺点是小型转储缺少异常信息。该信息(可选)使用第四个miniExceptionInfo参数传递:

这很好,除非我需要一种方法来在EXCEPTION_POINTERS发生异常时获取 Windows 提供的信息。

TExceptionPointers结构包含两个成员:

我知道 Delphi 的EExternal异常是所有“Windows”异常的基础,它包含所需的PExceptionRecord

但它不包含关联的ContextRecord.

PEXCEPTION_RECORD不够好吗?

如果我尝试传递EXCEPTION_POINTERSto MiniDumpWriteDump,留下ContextRecord零:

然后函数失败并出现错误0x8007021B

仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分

怎么样SetUnhandledExceptionFilter

你为什么不直接使用SetUnhandledExceptionFilter并获得你需要的指针呢?

问题在于未过滤的异常处理程序仅在异常未过滤时才会启动。因为这是 Delphi,而且因为我处理了异常:

该应用程序不会,我也不希望它因 WER 故障而终止。

我如何EXCEPTION_POINTERS在一个期间获得EExternal

注意:您可以忽略从背景开始的所有内容。它是不必要的填充物,旨在让我看起来更聪明。

先发制人的尖刻 Heffernan 评论:你应该停止使用 Delphi 5。

奖金阅读

0 投票
2 回答
5267 浏览

c# - 如何读取故障转储文件(我有源代码和 .pdb 文件)

我已经阅读了 StackOverflow 上已经存在的问题,但我仍然无法让它发挥作用。

我有

  • 来自客户的小型转储文件
  • 与客户获得的代码完全相同的版本
  • 在调试目录中,.pdb 文件为代码。

我尝试将迷你转储文件放在调试目录中,然后在 Visual Studio 2010 中打开它。我不知道这是否正确,或者下一步该做什么。

“开始调试”在正常的“调试”菜单中显示为灰色。

Minidump File Summary 选项卡的右上角有一个带有“Actions”的框。所以我点击了“仅使用本机调试”,但我得到的只是“当前位置没有可用的源代码”。

我一定错过了一些非常简单的东西 - 请有人给我一个提示吗?