我是使用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 ++。
我已经对这些警告进行了搜索,但没有找到任何有用的警告。任何帮助将不胜感激。
答案 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在如何影响可执行文件方面的范围有限吗?