2009-02-05 111 views
3

我以前曾经使用UMDH十几次,从来没有任何问题。什么原因导致UMDH无法提供堆栈跟踪

突然间,我没有在我的转储文件中的堆栈跟踪中找到函数名 - 只是一系列地址。

我有乌斯季启用:

GFLAGS exe_name +乌斯

我开始exe_name,然后我做

UMDH -p:PID此时就把one.txt存盘 UMDH -p:PID 2 .txt

我看着one.txt和two.txt,他们没有迹象表明这些来自哪里。当我做差异

UMDH此时就把one.txt存盘two.txt> diff.txt

结果是没有用的。

帮助,我喜欢这个工具。

回答

0

可执行地址和函数名称之间的映射在PDB中定义。

确保您的符号路径设置正确,
特别是如果您在与编译代码的机器不同的机器上运行UMDH,尤其如此。

3

UMDH做的PDB协会当你这样做的命令:

UMDH -d此时就把one.txt存盘two.txt -f:outputfile.txt

不是当你最初采取的快照。你必须让它为你做差异!

而且,是的......你需要正确设置符号路径。

1

UMDH开关语法在最新版本的debugging-tools-for-windows中略有变化。也许这就是问题所在。请尝试以下 -

UMDH -p:PID ** - F:**此时就把one.txt存盘

UMDH -p:PID ** - F:** two.txt

UMDH -v -l one.txt two.txt> diff.txt

(-l是一个新的开关,从PDB中提取文件和行号)。 再次确保_NT_SYMBOL_PATH环境变量包含您的 PDB的路径

Docs现在也可用online

(编辑:)在比较关键的开关,-v,现在存在...

(编辑:)没有指定您的操作环境。 It iswell known在VC8上,CRT的malloc是用FPO编译的 - UMDH无法克服。 也是known(见Pavel Lebedinsky的评论)UMDH不能处理某些分配器类型,例如, SysAllocString。如果你确实使用了一些奇特的分配器,你可能想试试LeakDiag - 它处理更多。