了解UMDH警告

时间:2010-10-20 17:03:57

标签: windows debugging umdh

我是使用UMDH的新手,我在理解如何处理输出的一些错误方面遇到了一些麻烦。我遵循典型用法(来自MS网站):

gflags -i OCES.exe +ust

在另一个终端窗口中:

OCES.exe

然后回到原始终端窗口:

umdh -p:5712 -f:out1.txt

但我收到UMDH的以下警告

Warning:
Warning: UMDH didn't find any allocations that have stacks collected.
Warning: Use gflags to enable allocation stack collection.
Warning: Restart the application for the setting to be in effect.
Warning: A 32bit GFLAGS must be used. The command is:
Warning: gflags -i OCES.exe +ust
Warning:

当我第二次调用UMDH时,我得到了同样的错误,当我使用UMDH来区分两个快照时,我没有得到任何有用的输出(没有堆栈或回溯)。我在另一台计算机上使用过UMDH,并没有遇到同样的问题(另一台计算机不再供我使用)。

UMDH的安装来自32位版本的“Windows调试工具”集合,我运行的是32位版本的WinXP Professional,我的软件是使用Visual Studio 2008的C ++。

我已经对这些警告进行了搜索,但没有找到任何有用的警告。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

运行gflags应用程序并转到“图像文件”选项卡。输入您的流程名称,然后按Tab键。现在将“堆栈回溯(Megs)”中的值增加到例如64或甚至128.默认情况下,此值为32Megs,据我所知,对于多个堆栈分配,这很容易超出。

答案 1 :(得分:0)

从描述中不清楚您是否这样做了,但是在为它设置+ust标志后必须重新启动该过程。

比较将继续失败,直到你摆脱了快照运行的警告。

编辑:

This article表示如果没有为ntdll.dll正确设置符号,该工具将无法正常工作。你能检查一下吗?

  

您可以体验的问题   您使用UMDH

     

使用时最常见的错误   发生UMDH是因为堆栈跟踪是   没有启用。另外,符号不正确   对于Ntdll.dll阻止UMDH   运行。对于其他符号文件,   UMDH运行但日志文件包含   堆栈跟踪没有功能   名字,但相反   模块内的地址。遥远的   第三个错误是指定错误的PID。

答案 2 :(得分:0)

@Steve - 我将主题从OCES.exe(我们的网络引擎)略微移动到我们的主应用程序,但我收到相同的警告(请参阅我的上面的主要主应用程序的详细信息。它同样的代码库为OCES.exe,它只是添加其他代码)。 out1.txt中的输出如下所示:

22 bytes + 1E at 151EA0 by BackTrace0
28 bytes + 18 at 151EE0 by BackTrace0
2D8 bytes + 18 at 151F20 by BackTrace0
314 bytes + 1C at 152210 by BackTrace0
314 bytes + 1C at 152540 by BackTrace0

这与我之前在计算机上收到的一些输出略有不同:

C0 bytes + 18 at 154B88 by BackTraceB
    7C96EED2
    7C94B394
    7C918F21
    7C91F661
    7C91F225
    7C91EF58
    7C91ED13
    7C915BAA
    7C91D129

所以我假设我错过了来自out1.txt的堆栈跟踪信息。我想知道gflags在如何影响可执行文件方面的范围有限吗?