问题标签 [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 投票
1 回答
3040 浏览

c - 如何使用纯 C 语言以编程方式创建转储文件?

我需要为用 C 编写的客户程序创建转储文件。

我看到有一个适用于 Windows 的小型转储,它只适用于 C++ 吗?

C语言还有其他解决方案吗?

感谢您的时间。

0 投票
2 回答
1256 浏览

com - 如何从 Visual Basic 转储文件中检查 COM 对象?

背景

我们有一个用 C# 编写的 .NET WinForms 应用程序,它通过控制台应用程序连接到手持式商店扫描仪。控制台应用程序是用很好的 VB6 编写的——那里没有托管代码。VB6 应用程序由几个 COM 对象组成。

.NET WinForms 应用程序通过调用具有正确参数的控制台应用程序来刷新扫描仪中的数据。当控制台应用程序启动时,它会弹出一个模态表单,提醒用户将手持设备放入支架中。

问题

客户有一个奇怪的情况,启动控制台应用程序的调用在显示提醒表单之前似乎挂起。如果用户按下任何键——即使是像 Shift 或 Alt 这样的无害键——应用程序将解冻,并出现提醒表单。挂起时,控制台应用程序的 CPU 使用率非常高。

我们使用ProcDump从命令行应用程序获得了内存转储。我有一些调试托管转储文件的经验,但是这个 VB 6 转储对我来说很奇怪。

我们连续捕获了几个完整的内存转储。在其中一些中,似乎有 COM 胶水堆栈。例如,几个转储文件显示如下调用堆栈:

我拥有的唯一符号来自我们的代码,这无济于事。Microsoft 符号服务器没有用于 msvbm60.dll 的 PDB 文件(或者至少没有来自其版本 6.0.98.2)。

问题

我怀疑可能存在仅在他们的系统上发生的一些 COM 线程问题。

1)如何确定转储文件中每个线程的线程状态?如果这是一个托管转储文件,我会查看!threads然后!threadstate找出线程状态。没有托管代码,所以我不能使用 sos.dll。我没有看到任何使用~and的提示!teb

2) 有没有办法查看在转储文件中创建了哪些 COM 对象?同样,在托管转储中,我可以执行 a!dumpheap来获取托管对象的列表。我可以为 COM 对象找到类似的东西吗?

3) 我可以确定转储文件中COM对象的线程模型吗?

0 投票
0 回答
1567 浏览

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

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

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

0 投票
1 回答
4477 浏览

c++ - 在 Visual Studio 中调试本机 c++ 转储文件时如何查看源代码

我从运行我的本地 c++ 应用程序的服务器获得了一个小型转储。我也有 exe 和 pdb 文件。我可以使用 Visual Studio 2005 Pro 打开 minidump 并正确加载 pdb 文件中的符号。

我运行调试器 (F5),它告诉我它崩溃了。当我单击堆栈跟踪查看位置时,它告诉我找不到源代码“当前位置没有可用的源代码。”。

如何告诉 Visual Studio 源代码在哪里?

我的 exe 是一个优化的发布版本,我使用 pdb 文件构建。

0 投票
1 回答
844 浏览

minidump - 子进程崩溃时如何为它创建一个小型转储?

当我的进程出现异常时,我有代码可以输出一个小型转储,但我想将该代码移动到父进程,这样一个进程就不会破坏另一个进程。

(1.)如何从包装进程中监听子进程崩溃,以及(2.)编写一个小型转储结果?

C++ 似乎是包装程序最自然的语言选择,但 .NET 对我来说也是一种选择(我的应用程序是混合 C#/C++)。

0 投票
0 回答
31819 浏览

c++ - C++ 异常“线程试图读取或写入它没有适当访问权限的虚拟地址。”

为了追查一些难以重现的崩溃,我将其配置UnhandledExceptionFilter为创建迷你转储文件,如下所述:Debugging Custom Filters For Unhandled Exceptions and Effective Minidumps

转储已成功捕获,但我在解释堆栈信息时运气不佳。希望其他人也经历过类似的事情,我将在下面提供尽可能多的细节。抱歉,如果这个问题最终变得有点冗长。

Visual Studio 提供以下转储摘要:

查看发生异常的线程的堆栈,我们得到以下极短的调用堆栈:

应用程序中所有正确的线程都有很好的干净堆栈,显示调用一直到__RtlUserThreadStart例如:

崩溃线程堆栈的下部如何被 0xCCCCCCCC 替换?

为了完整起见,这里是框架的拆卸Server.exe!CServer::LoadPageList() Line 269 + 0x28 bytes

更新

完全忘记包含函数源(感谢 Joachim):

奇怪的是,函数 LoadPageList 中的所有操作都成功完成,崩溃似乎发生在字符串的析构函数被调用之后,就在从这个堆栈帧返回之前。

0 投票
0 回答
1286 浏览

c# - 当应用程序独立运行(没有调试器)时,MiniDumpWriteDump() 不起作用

在我的 .NET4 应用程序中,我MiniDumpWriteDump()调用Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException.

当我在调试器(VS10)中运行应用程序时,我得到了一个完美的转储,但是当我独立运行它时,转储文件是空的。

有任何想法吗?

0 投票
1 回答
869 浏览

c# - Minidump 符号不会在发布模式下加载

我正在尝试使用 VS 2010 调试小型转储。

虽然由我在“调试模式”中构建的应用程序生成的小型转储工作正常并且可以正确调试,但由在“发布模式”中构建的应用程序生成的小型转储不起作用。我的意思是我在调试小型转储时收到“无可用源”的问候,因为据说这些符号有问题。

“模块”窗口中的“符号状态”显示:“符号文件中没有本机符号”。

如果我从符号路径加载符号,我会得到“在此文件夹中找不到匹配的符号文件”。当然这是不正确的(我一直都知道,但以防万一我检查了它们是否真的与 ChkMatch.exe 匹配并且确实如此)。

我已经设法弄清楚究竟是哪些构建开关使小型转储无法使用——它们是“优化代码”和“调试信息”。使小型转储“工作”的唯一方法是取消选中“优化代码”并使用“完整”调试信息(不,pdb-only 不起作用)。这两个都有性能影响,我真的很想避免将这种构建设置用于我的应用程序的发布版本。

有谁知道为什么这两个开关会使小型转储无法使用?

谢谢。

0 投票
1 回答
998 浏览

c# - MinidumpWriteDump from managed code throws an AccessViolationException

I have the basic MiniDumpWriteDump method interop copied off the internet in my C# (3.5) project.

Up till now, i have used this code to register on the UnhandledException event, to take a crash dump before the process shuts down.

In a particular scenario i am facing now, i have set this function to be used in some other case, to take a diagnostic memory dump of the process.

Whenever this function gets called (not from the UnhandledException handler), it throws an AccessViolationException

Here's what the MiniDump code looks like (removed some redundant parts):

Native types are defined like so:

0 投票
1 回答
993 浏览

windbg - 创建在 64 位操作系统中运行的 32 位进程的 minidump

我有一个 .net 应用程序,它设计为在 32 位环境中运行,它在 wow64 环境中的 64 位操作系统中运行。

现在我正在创建一个实用程序(32 位)来为应用程序创建转储。

我使用以下代码创建转储。

此 API 调用在 32 位操作系统中执行良好,但在 64 位操作系统中失败。

有人在 64 位操作系统中为 32 位应用程序创建了转储吗?请帮助。