问题标签 [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.
winapi - Windows 损坏的小型转储
当我的程序崩溃时,它会从未处理的异常处理程序中创建一个小型转储。我遇到的问题是人们向我发送故障转储,但是当我尝试在 Visual Studio 2010 中打开它们时,它说它们已损坏(“转储文件的格式无效”)。我没有分发dbghelp.dll
我的程序,我需要吗?我假设如果是版本问题,Visual Studio 会让我知道并且不会输出上述消息。
我用来生成日志的代码是
debugging - 如何使用 DbgHelp 访问转储中的 PEB(进程环境块)
我找到了一个使用调试器引擎 API 在转储中获取 PEB的示例。这可以使用 DbgHelp 吗?拥有使用 DbgHelp 提取注释和异常信息的现有代码。如果可能的话,想从 PEB 获取一些信息。
winapi - MiniDumpWriteDump 并为同一次崩溃编写多个转储?
TL;DR为同一个崩溃事件编写多个转储是否有意义,如果是,您需要注意什么。
MiniDumpWriteDump
当我们的应用程序中存在未处理的异常 / 中止 / younameit 时,我们会使用它来编写故障转储。
到目前为止的代码实际上写了两个转储:
- 一个
MiniDumpWithDataSegs
可以得到一个小的,即使是糟糕的电子邮件,一旦压缩就可以发送,没有问题。 - 如果
MiniDumpWithFullMemory
我们需要,可以提供完整的信息。
为了完成这项工作,我们调用MiniDUmpWriteDump
了两次:
据我所知,这个方案的一个附加想法是编写小转储更快。基本上总是亚秒级,而写入大转储通常需要几秒钟,特别是当应用程序完全加载并且大转储很容易达到 1.2 GB 或更多时。
据我所知,首先编写小转储的想法是,因为它更快,它会在崩溃的时间点对崩溃的进程进行更详细的快照,因为该进程是多线程的。
显然,进程的线程在第一次调用结束和第二次调用 MDWP 开始之间继续运行,所以我们确实有很多情况,小转储中的信息实际上比大转储。
考虑到这一点之后,我会假设要写入转储,MiniDumpWriteDump
无论如何都必须挂起进程的线程,所以如果我们先写大转储,我们会让大转储比小转储更准确。
问题
我们应该在小转储之前写大转储吗?我们甚至应该写两个转储吗?我们能否以某种方式让系统首先挂起进程的线程,然后编写两个完全“同步”的转储?
.net - 应用程序是否可以同时加载 NativeImage 和 JIT 版本的 .Net dll?
我正在为我们发布的应用程序调查一些小型转储。我无法在本地重现这些崩溃,但对于大量报告,我注意到加载的 dll 列表包括常规和 .ni。一些 WPF dll 的版本。
来自 VS 2010 的“模块”窗格,例如 PresentationCore(在此处格式化)
PresentationCore.dll C:\Windows...\PresentationCore.dll - 已加载符号。C:\Users...\PresentationCore.pdb
PresentationCore.ni.dll *C:\Windows...\PresentationCore.ni.dll - 找不到匹配的二进制文件。PresentationFramework.Aero.dll *C:\Windows...\PresentationFramework.Aero.dll - 找不到匹配的二进制文件 PresentationFramework.Aero.ni.dll *C:...\NativeImages...\PresentationFramework.Aero.ni.dll - 没有找到匹配的二进制文件。
基本上,看起来我们正在加载 NativeImage 和 JIT 版本。这可能吗?
我在本地机器上检查了我们发布的产品的负载,Visual Studio 只列出了模块窗格中加载的单个版本。此外,Fusion 在加载 NativeImage 版本时没有报告错误,我认为这是通常的警告:
警告:将不会在 LoadFrom 上下文中探测本机图像。本机映像只会在默认加载上下文中进行探测,例如使用 Assembly.Load()。
据我所知,我们不使用 LoadFrom 来引用这些二进制文件,所以......
我在调用堆栈中看到 NativeImage 和普通 Dll 的混合是否有原因?正常吗?知道这是否会导致问题,您是否推荐任何防止这种情况发生的方法?
c# - minidump 文件对分析 .NET WinForms 应用程序崩溃有用吗?
minidump 文件对分析 .NET WinForms 应用程序崩溃有用吗?我注意到NBug可以选择生产它们,但如果我收到一个,我不确定它如何帮助查看堆栈跟踪。
如何使用此文件进行 .NET 调试?
types - MiniDumpWriteDump 及其 MINIDUMP_TYPE 类型
不久前,我们了解到即使发布版本也可能无法正常运行 - 可能会下降 - 可能会挂起等等。所以我们决定实施转储创建过程。在 Internet 上很快找到了所有步骤。但是一个——主要的事情——对我们来说仍然是无法理解的。
根据 MSDN,MINIDUMP_TYPE 支持 23 个标志。但是对于下一个问题没有深入的技术解释:它们在各自的应用领域中都是独立的吗?或者它们可以成对使用,三联使用?它们都可以同时使用吗?我可以在某些组中使用它们吗(例如,一些 3 个标志 - 与其他 5 个标志几乎生成相同的转储。)我的意思是当我将使用前。1+3 标志 - 绝对等同于使用标志 4+6+9。或标志 1 或标志 3 或 ... - 是所有其他标志的叠加吗?或者是什么?我想了解所有可用标志之间所有可能的交叉。因为使用标志 3+12+14 可能没有实际意义。例如,我目前的目标是使用内存中绝对所有可用数据创建转储。我应该能够查看所有线程,所有 local-static-global-in_heap 变量。我的意思是,当我打开一些使用 bla+bla+bla 标志组合生成的转储时 - 它应该与我可以将调试器直接附加到进程的情况完全相同。我应该获得所有可能的数据!
PS MiniDumpWithFullMemory - 没有给我这样的能力(((为什么?这个词@FULL@ memory - 并不意味着FULL?它只是什么的一部分?
visual-studio-2010 - 调试故障转储时是否可以更改可执行路径?
在尝试调试在客户 PC 崩溃期间采取的应用程序的 minidump 时,我发现他们安装应用程序的路径似乎会影响我的可执行文件的安装位置以进行调试。
例如,如果用户安装在某个位置“N:\AppFolder”,我被迫创建一个带有字母“N”和“AppFolder”的驱动器,并在调试应用程序之前安装我的应用程序。否则,我会收到一条错误消息,提示找不到模块。有没有办法在调试故障转储时选择可执行文件或模块的任意位置?
环境:Visual Studio 2010,Windows 7 crashdumps 是 minidump 类型。
c++ - 使用 minidumps 和 GDB 分析 mingw 编译的可执行文件的崩溃?
我使用 Cmake + mingw 来编译我的项目。由于某个未知的时刻,我的程序在启动时开始崩溃,我想出了如何让 windows 为我崩溃的应用程序制作 minidump。我会使用 GDB 直接调试我的应用程序,但是当我使用 GDB 时,程序不会崩溃。Google breakpad 包含将 minidumps 转换为 coredumps 的工具,所以我尝试编译 google breakpad 但似乎 breakpad 不是 Windows 解决方案。我正在寻找解决方案如何检查小型转储并找出我的程序在启动时崩溃的原因。你怎么做呢?
c# - 打开 Minidump:符号文件中没有本机符号
在一个 C# 项目中,我在 UnhandledException 处创建了 minidump。在我的开发机器中,项目源和 bin 在路径 K:\projects\*MYPROJECT* 下,如果我设法让它在我的开发机器中崩溃,一切正常,我可以打开 minidump 文件并正确查看源代码,调用堆栈, 线程等
最终用户的程序路径显然会有所不同;例如,在我们的测试机项目中安装在 C:\*MYPROJECT* 下。它与 pdb 符号文件一起部署。无论如何,当我尝试在我的开发计算机(我有源文件)上打开在该机器上生成的 minidump 时,Visual Studio 尝试在“测试路径”下找到可执行文件和 pdb 文件(C:\*MYPROJECT* ) 当然没有找到它。
我尝试将符号路径设置为包含 K:\projects*MYPROJECT* 而没有任何结果,因此我重新创建了相同的测试目录结构,创建 C:\*MYPROJECT* 并在该目录下复制 .exe 和 .pdb 文件。现在,Visual Studio 能够找到它们,但它说“符号文件中没有本机符号”,并且它没有让我看到任何源代码。
我怎样才能完成加载正确的符号?
c++ - 如何读取小型转储?
我有一个通过MiniDumpWriteDump写入文件的小型转储。该文件是从客户端发送给我的(即我不能使用某种即时调试器)。我的问题是:如何打开它?Visual Studio 给出错误:“不支持调试旧格式的故障转储。” 我用谷歌搜索,发现人们正在使用 Visual Studio 打开内核转储。这不是内核转储,只是应用程序崩溃的转储。我也尝试用 WinDbg 打开它,但也无法打开它。如何获取信息?