0

我是使用 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++ 版本。

我已经对这些警告进行了搜索,但没有发现任何有用的信息。任何帮助将非常感激。

4

3 回答 3

1

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

于 2011-03-14T13:16:32.880 回答
0

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

在您消除快照运行的警告之前,比较将继续失败。

编辑:

本文指出,如果没有为 ntdll.dll 正确设置符号,该工具将无法工作。你能检查一下吗?

使用 UMDH 时可能遇到的问题

使用 UMDH 时最常见的错误是由于未启用堆栈跟踪而发生的。此外,Ntdll.dll 的不正确符号会阻止 UMDH 运行。对于其他符号文件,UMDH 运行,但日志文件包含没有函数名称但在模块内具有相对地址的堆栈跟踪。遥远的第三个错误是指定了错误的 PID。

于 2010-10-20T17:07:59.700 回答
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 在它如何影响可执行文件方面是否有一些有限的范围?

于 2010-10-20T18:24:34.963 回答