问题标签 [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.
c++ - 什么可能导致小型转储反汇编与二进制反汇编不同?
我有一个崩溃的小型转储。在崩溃点,有一些看起来不应该成功运行的奇怪代码。就像是:
AnObject::AFunction 是返回 bool 的成员函数。所以结果应该以 0 或 1 的形式存储在 eax 中。此时取消对 eax 的引用是没有意义的。
我反汇编了相应的二进制文件,确实,这个函数的代码不同:
为什么 minidump 反汇编代码与实际的二进制反汇编代码不同?
debugging - 是否可以“转储”正在运行的进程并在另一台 PC 上恢复/继续?
我们在客户那里遇到了不可重现的问题(某些数据显示不正确)。客户自己每天都会遇到几次问题,但我们无法在内部重现问题。
一旦客户出现问题,我们可以使用远程调试来调查运行过程,但这需要开发人员PC通过大量VPN软件连接到客户PC。实际上,这几乎是不可能的,因为客户不希望我们直接连接到运行应用程序的服务器(通常还涉及远程桌面或 Citrix 系统)。
我知道您可以制作一个正在运行的进程的 MiniDump 以在调试器中对其进行调查,但是您无法继续该进程以查看实际情况。
是否有可能对进程进行转储,将转储复制到开发人员 PC,然后在开发人员 PC 上继续该进程?应用程序是本机非托管 C++ 应用程序。
当然,所有与数据库连接、网络连接、文件等相关的逻辑都将不可用,但在这种情况下,我主要对内部逻辑感兴趣。
如果这是不可能的,这通常可以使用虚拟机来代替吗?
kernel - 如何使用 WinDbg 创建内核转储
我正在使用 WinDbg 为 Windows 调试内核模式设备驱动程序。是否可以按需创建小型转储?
我的意思是,我的一个断点被击中,系统停止了。我想创建一个小型转储(假设只有堆栈)。是否有为此的 WinDbg 关键字?
提前致谢
c++ - 在进程外使用 MiniDumpWriteDump 时如何获取异常信息?
当使用 MiniDumpWriteDump 函数在 Windows 上创建进程的核心转储时,建议(例如here和here)MiniDumpWriteDump
从另一个“看门狗”进程运行,因为从同一进程中调用它可能无法正常工作。
目前,我们的应用程序在一个未处理的异常上调用它(我们从一个看门狗线程执行它)。由于我们有时会遇到无法正常工作的问题,因此我们希望将其移至单独的进程。
现在,通知另一个进程开始写入转储是微不足道的(只需使用一个事件,信号量,你可以命名它)但是我如何将LPEXCEPTION_POINTERS
我为我注册的回调函数获得的信息传递SetUnhandledExceptionFilter
给另一个进程,以便它可以传递给MiniDumpWriteDump
sExceptionParam
参数?
c++ - MiniDumpWriteDump 和写入管道会导致死锁
在我的应用程序中,我Unnamed Pipes
用作函数的输出MiniDumpWriteDump
- 我不想实际创建文件,只需将 MiniDump 写入内存缓冲区。
从另一个线程调用从管道读取字节的方法。当我调用MiniDumpWriteDump
函数时,ReadFile
andMiniDumpWriteDump
函数永远不会返回。
我试图检查是否是句柄错误或管道尺寸太小的问题,但是当我使用简单的WriteFile
功能时,一切似乎都很好(即使管道尺寸小于写入的字符串)。
这是我的一段代码:
windows - 来自另一个进程的 MiniDumpWriteDump
我想使用 MiniDumpWriteDump 为我的应用程序生成崩溃日志。Microsoft 建议从另一个进程执行转储,这是我正在尝试做的。我遇到的问题是将PEXCEPTION_INFORMATION
结构从父进程传递给子进程。问题是父进程拥有这个结构的内存,我需要把它交给孩子。我找到了这篇文章
在进程外使用 MiniDumpWriteDump 时如何获取异常信息?
并且接受的答案说“指针在看门狗进程的上下文中无效并不重要。” 这让我相信我可以简单地将PEXCEPTION_INFORMATION
我的未处理异常过滤器接收到的指针传递给子进程,Windows 会从父进程中读取它。这没有发生,所以我真的不知道该怎么做,此时子进程崩溃,大概是因为 Windows 试图访问这个内存,就好像它属于孩子一样。我显然在这里遗漏了一些东西,但我不确定是什么。我使用管道将数据发送到子进程,上述问题的答案说使用内存映射文件有效,但我不确定为什么,或者我是否正确理解了答案。
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 ),但还是找不到它们!
任何帮助将非常感激
c++ - C++ 禁用缓冲区溢出框
我的问题是,在应用程序崩溃期间它会弹出缓冲区溢出消息,我正在使用 minidumps 设置未处理的异常过滤器,这足以使程序简单地崩溃并关闭而不是弹出消息。
我已经测试了应用过滤器后立即取消引用 NULL 指针的程序,并且它在服务器机器(程序设置为运行的地方)上工作,尽管即使使用过滤器,应用程序处于发布模式并且没有定义调试,仍然会弹出消息。
这个问题非常严重,因为我们有另一个应用程序在每次崩溃时自动重新启动它,这不会发生,因为在崩溃时会显示一个消息框而不是程序关闭,它是一个服务器,它应该没有停机时间,也是由于没有创建 .dmp 文件的消息框。
delphi - 如何在 EExternal 异常期间获取 EXCEPTION_POINTERS?
我如何获得EXCEPTION_POINTERS
,即两者:
PEXCEPTION_RECORD
和PCONTEXT
EExternal
异常期间的数据?
背景
当 Windows 抛出异常时,它会传递一个PEXCEPTION_POINTERS
; 指向异常信息的指针:
当Delphi向我抛出EExternal
异常时,它只包含一半的信息,PEXCEPTION_RECORD
唯一的:
在EExternal
异常期间,我如何同时获得两者?
示例用法
我正在尝试使用MiniDumpWriteDump
Delphi 的函数编写一个 Minidump。
该函数有几个可选参数:
在基本层面上,我可以省略三个可选参数:
它成功了。缺点是小型转储缺少异常信息。该信息(可选)使用第四个miniExceptionInfo参数传递:
这很好,除非我需要一种方法来在EXCEPTION_POINTERS
发生异常时获取 Windows 提供的信息。
该TExceptionPointers
结构包含两个成员:
我知道 Delphi 的EExternal
异常是所有“Windows”异常的基础,它包含所需的PExceptionRecord
:
但它不包含关联的ContextRecord
.
还PEXCEPTION_RECORD
不够好吗?
如果我尝试传递EXCEPTION_POINTERS
to MiniDumpWriteDump
,留下ContextRecord
零:
然后函数失败并出现错误0x8007021B
仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分
怎么样SetUnhandledExceptionFilter
?
你为什么不直接使用
SetUnhandledExceptionFilter
并获得你需要的指针呢?
问题在于未过滤的异常处理程序仅在异常未过滤时才会启动。因为这是 Delphi,而且因为我处理了异常:
该应用程序不会,我也不希望它因 WER 故障而终止。
我如何EXCEPTION_POINTERS
在一个期间获得EExternal
?
注意:您可以忽略从背景开始的所有内容。它是不必要的填充物,旨在让我看起来更聪明。
先发制人的尖刻 Heffernan 评论:你应该停止使用 Delphi 5。
奖金阅读
- MSDN:崩溃转储分析(Windows)
(如何调用的详细示例
MiniDumpWriteDump
) - CodeProject:使用 Minidump 和 Visual Studio .NET 对应用程序进行事后调试 (一般性讨论概念、优点以及如何生成和使用 minidump)
- Stackoverflow:当我的进程崩溃时如何为它创建小型转储? (初步介绍迷你转储世界)
- Stackoverflow:可以防止单个应用程序的 Microsoft 错误报告吗? (在 Delphi 中设置未过滤的处理程序)
c# - 如何读取故障转储文件(我有源代码和 .pdb 文件)
我已经阅读了 StackOverflow 上已经存在的问题,但我仍然无法让它发挥作用。
我有
- 来自客户的小型转储文件
- 与客户获得的代码完全相同的版本
- 在调试目录中,.pdb 文件为代码。
我尝试将迷你转储文件放在调试目录中,然后在 Visual Studio 2010 中打开它。我不知道这是否正确,或者下一步该做什么。
“开始调试”在正常的“调试”菜单中显示为灰色。
Minidump File Summary 选项卡的右上角有一个带有“Actions”的框。所以我点击了“仅使用本机调试”,但我得到的只是“当前位置没有可用的源代码”。
我一定错过了一些非常简单的东西 - 请有人给我一个提示吗?