【问题标题】:Understanding UMDH Warnings了解 UMDH 警告
【发布时间】:2011-04-28 04:26:09
【问题描述】:

我是使用 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,我的软件是 C++ 和 Visual Studio 2008。

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

【问题讨论】:

  • 似乎在与可执行文件相同的终端中执行 gflags 似乎没有发出警告(与 MS 的示例以及我在以前的计算机上遇到的情况相反)。但是,我的主应用程序(不是 OCES.exe)收到了相同的警告,它将控制权返回给终端(OCES.exe 没有;它锁定了终端)。所以我“假设”影响 gflags 的范围可能有限。对于将控制权释放回终端窗口的应用程序,是否有更好的方法来处理 gflags 的使用?
  • gflags 应该会影响注册表。您可以使用转储当前设置的gflags /i oces.exe 检查它是否有效。使用不带参数的gflags,您应该加载GUI版本,您也可以通过这种方式检查和设置EXE的标志。
  • @Steve。我会试试这个。如果它不起作用,它可能是我们的主应用程序而不是 UMDH。这是一个相当大的代码库,包含许多 COTS 产品,因此 gflags 可能对某些内容不满意。我将尝试其他一些泄漏工具,例如 LeakDiag 和 DebugDiag。感谢您为更好地了解 UMDH 提供的所有帮助,Steve。非常感谢!

标签: windows debugging umdh


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    编辑:

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

    您可能会遇到的问题 您使用 UMDH

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

    【讨论】:

    • 是的。 gflags 调用在调用 OCES.exe 之前。
    • @Clifford - out1.txt 中还有其他内容吗?
    【解决方案3】:

    @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 对可执行文件的影响范围是否有限?

    【讨论】:

    • 查看我的编辑。顺便说一句 - 如果您愿意,您可以使用更多数据编辑您自己的问题。
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多