如何使用Visual C++应用程序的完整应用程序数据读取Minidump的应用程序数据

How to read the application data of a Minidump with full Application data for a Visual C++ application?

本文关键字:应用程序 数据 何使用 读取 Minidump Visual C++      更新时间:2023-10-16

我有一个应用程序已进入挂起状态。这个应用程序实际上是三个不同ex的组合。UI.exe、core.exe、core.dll,这些基本都是在VC++上构建的。所以当我查看应用程序日志时,我可以看到ui.exe在某个地方停止了。因此,我通过任务管理器->进程->选择ui.exe和core.exe右键单击它并"创建转储文件",获得了包含完整应用程序数据的迷你转储。ui.exe dmp文件中存在一些150MB以上的数据。如何分析?

到目前为止,我可以加载转储文件及其所有必要的pdb文件(应用程序+系统),并成功地加载了值。我可以看到应用程序正在运行,但没有响应core.exe请求。

现在我真的在寻找ui.exe和core.exe的堆和堆栈中的应用程序数据,这样我就可以检查数据的堆积位置。哪个变量/数组正在吞噬该值。有人能告诉我怎么做吗?

根据您经历的挂起类型,有几个选项。一个是低CPU挂起,这可能是死锁。另一个是高CPU挂起,这可能是一个无休止的循环。调试死锁通常更容易,因为您可以获得良好且始终相同的调用堆栈。调试高CPU挂起比较困难,因为根据转储的时间,可能会有不同的调用堆栈。您需要几个转储,或者最好使用探查器。

回答您的问题:

如何分析

主要有三种选择

  • Visual Studio。这似乎是你所做的,但由于某种原因,你无法从你所看到的事情中得出结论。发生这种情况的原因可能是Visual Studio没有提供必要的分析步骤,或者它们隐藏在某个地方,所以您找不到它们
  • WinDbg当然是所有想要更多命令和控制的人的选择。现在下载它,开始在简单的情况下使用它,熟悉它,最后你会讨厌它,但它仍然是你最喜欢的调试器。既然学习起来难得离谱,那么在这种情况下你就不会取得好的进步。如果要执行,请使用!analyze -v作为第一个命令。但无论如何,试着
  • 调试诊断。做一个挂起的分析,希望它能给你一些有用的信息

有人能告诉我怎么做吗?[找出数据堆积的位置]

我无法清楚地看到大量数据是如何与挂起的应用程序相关的。数据在堆栈上或堆上,具体取决于应用程序的实现方式。请注意,在C++中,对象类型和内存之间没有像.NET中那样清晰的映射。您不能简单地键入命令,如显示Xyz类型的所有对象

在VisualStudio中,局部变量等可能是幸运的,因为它们可能会被解析。在WinDbg中,您可以使用一些!heap命令,并可能配置一些GFlag设置来跟踪内存分配。