问题标签 [minidumpwritedump]

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 投票
1 回答
1875 浏览

c++ - C++ MiniDumpWriteDump - FullMemoryDump 没有给我太多信息

我一直在使用 MiniDumpWriteDump 在崩溃时生成转储文件。我一直在尝试进行完整的内存转储。这似乎有效,并按预期生成了一个大文件。

但是,当我将这个巨大的文件加载到 Visual Studio (2005) 中时,我似乎无法看到堆上任何变量的值。事实上,它给我的信息并不比普通转储多...

我对 MiniDumpWriteDump 的调用如下;

注意:我有一套完整的 pdb,一个有效的堆栈,在我的测试应用程序中,我用被零除来伪造一个错误。

知道这是为什么吗?

干杯丰富

0 投票
5 回答
1462 浏览

debugging - 在保留一些堆信息的同时减少托管程序的小型转储的大小?

借助 .NET 4.0 中的转储调试支持,我们正在自动研究(当然是在询问用户之后:)创建 C# 程序崩溃的小型转储,以将它们上传到我们的问题跟踪系统(以便小型转储可以帮助解决问题的原因)碰撞)。

使用 WithFullMemory 小型转储类型时一切正常。我们可以看到堆栈和堆变量。不幸的是,即使对于小型 C# 程序,(压缩的)转储也非常大。

如果我们使用“Normal”小型转储类型,我们会得到一个非常小的转储,但托管调试器中甚至没有堆栈变量信息。事实上,任何低于 WithFullMemory 的东西在托管调试器中似乎都毫无用处。我们曾尝试使用 MINIDUMP_CALLBACK_ROUTINE 将包含的模块信息限制在我们自己的模块中,但似乎它对托管转储几乎没有影响,但仍然设法破坏托管调试?

有没有人有关于如何修剪小型转储同时保持它对托管调试有用的任何提示?

0 投票
1 回答
665 浏览

debugging - MiniDumpWriteDump()函数的参数:为什么我们需要一个句柄和一个ID?

我检查了 MSDN 上 MiniDumpWriteDump() 方法的定义如下:

参数:

hProcess [输入]

要为其生成信息的进程的句柄。

进程 ID [in]

要为其生成信息的进程的标识符。

既然进程句柄或进程 ID 都可以识别进程,为什么我们需要同时传递它们呢?我们不能从另一个推断其中一个吗?那么它们之间应该存在一些差异,它们是什么?

谢谢。

0 投票
2 回答
1792 浏览

.net - 什么是最小 MINIDUMP_TYPE 设置以转储托管 .net 组件的本机 C++ 进程,以便能够在 windbg 中使用 !clrstack

有托管多个 .net 组件的本机 C++ 应用程序。当出现一些错误时,此应用程序使用 MiniDumpWriteDump 函数创建迷你转储。在这里提问什么是最小集合

应该传递给 MiniDumpWriteDump 以生成小转储文件但能够查看 clr 堆栈)?当然,完整的内存转储会起作用,但如何只获得可承受的最小值?

0 投票
2 回答
5253 浏览

debugging - 为什么 MiniDumpWriteDump 失败?

我创建了自己的调试器应用程序。它附加到一个进程并创建一个故障转储文件。这在大多数情况下都有效。我遇到的问题是,当被调试的应用程序正在等待互斥对象时它不起作用(这正是我想要调试的问题)。

此外,我创建了一个简单的 test.exe 应用程序,它只是循环并调用 Sleep(100),但我的调试器每次在此应用程序上调用 MiniDumpWriteDump 时都会失败。

我究竟做错了什么?

我从下面的代码返回的错误代码是 2147942699 (0x8007012b)

我还尝试使用以下代码片段增加权限,该代码片段是从其他似乎有类似问题的人那里借来的:

0 投票
1 回答
843 浏览

c - MiniDumpWriteDump 段错误?

我正在尝试转储一个进程,比如说calc.exe

当我运行我的程序时,我得到

这是代码

0 投票
0 回答
1567 浏览

c++ - MiniDumpWriteDump 使用 MiniDumpNormal 失败,但可以使用 MiniDumpWithFullMemory

我从运行在 Windows XP SP3 上的本地服务应用程序的顶级异常处理程序调用MiniDumpWriteDump API,如下所示:

以上失败,错误代码为 0x80070057,但如果我将转储类型更改为 MiniDumpWithFullMemory,它就可以正常工作。知道为什么吗?

0 投票
1 回答
2591 浏览

winapi - Windows 损坏的小型转储

当我的程序崩溃时,它会从未处理的异常处理程序中创建一个小型转储。我遇到的问题是人们向我发送故障转储,但是当我尝试在 Visual Studio 2010 中打开它们时,它说它们已损坏(“转储文件的格式无效”)。我没有分发dbghelp.dll我的程序,我需要吗?我假设如果是版本问题,Visual Studio 会让我知道并且不会输出上述消息。

我用来生成日志的代码是

0 投票
3 回答
1523 浏览

winapi - MiniDumpWriteDump 并为同一次崩溃编写多个转储?

TL;DR为同一个崩溃事件编写多个转储是否有意义,如果是,您需要注意什么。


MiniDumpWriteDump当我们的应用程序中存在未处理的异常 / 中止 / younameit 时,我们会使用它来编写故障转储。

到目前为止的代码实际上写了两个转储

  • 一个MiniDumpWithDataSegs可以得到一个小的,即使是糟糕的电子邮件,一旦压缩就可以发送,没有问题。
  • 如果MiniDumpWithFullMemory我们需要,可以提供完整的信息。

为了完成这项工作,我们调用MiniDUmpWriteDump了两次:

据我所知,这个方案的一个附加想法是编写小转储更快。基本上总是亚秒级,而写入大转储通常需要几秒钟,特别是当应用程序完全加载并且大转储很容易达到 1.2 GB 或更多时。

据我所知,首先编写小转储的想法是,因为它更快,它会在崩溃的时间点对崩溃的进程进行更详细的快照,因为该进程是多线程的。

显然,进程的线程在第一次调用结束和第二次调用 MDWP 开始之间继续运行,所以我们确实有很多情况,小转储中的信息实际上比大转储。

考虑到这一点之后,我会假设要写入转储,MiniDumpWriteDump无论如何都必须挂起进程的线程,所以如果我们先写大转储,我们会让大转储比小转储更准确。

问题

我们应该在小转储之前写大转储吗?我们甚至应该写两个转储吗?我们能否以某种方式让系统首先挂起进程的线程,然后编写两个完全“同步”的转储?

0 投票
0 回答
735 浏览

crash-dumps - 从 Windows 上的 DLL 自动生成故障转储

我的目标是在应用程序崩溃时生成崩溃转储。

我有一个用 C++ 编写的 DLL。它用于 C# .NET 应用程序(以及其他应用程序)。在 DLL 中,我使用 SetUnhandledExceptionFilter 设置我自己的自定义未处理异常过滤器,并在处理程序中使用 MiniDumpWriteDump 编写转储。

当我在 VS2008 中运行 .NET 应用程序时,它工作正常,当出现内存访问冲突时,转储被写入,应用程序退出。

但是,当我在 VS 之外独立运行它时,根本不会调用我的自定义处理程序,也不会写入转储。相反,会显示一个错误对话框,其中包含消息“您的应用程序中发生未处理的异常...”以及“详细信息”、“继续”和“退出”按钮。

我猜当我作为独立运行它时,操作系统(Windows 7)由于某种原因阻止我的处理程序被安装。

谁能帮我这个?