我试图抓住地址的堆栈跟踪,但它总是没有显示任何内容,
我的问题是分析内存泄漏,所以我查询了所有堆静态,然后查询最高分配内存,它返回了我很多分配,
我尝试通过“!heap -p -a ####”搜索许多分配地址,####是地址。 但它永远不会给我任何调用堆栈,
但如果我在内存中搜索此地址/任何其他地址,则会显示类似的分配。
如果我尝试运行此命令“dt ntdll!_DPH_HEAP_BLOCK StackTrace ####,”,它会返回NULL堆栈跟踪。
是不是因为应用程序的页面堆没有启用????
答案 0 :(得分:0)
对于本机内存问题,您无法轻松使用转储来确定根本原因。
Microsoft为32位进程提供了一个工具DebugDiag,
在某些典型情况下,您可以使用它来跟踪本机内存泄漏,
http://support.microsoft.com/kb/919790
此外,涉及Microsoft支持团队可以加快根本原因分析,
答案 1 :(得分:0)
这里有很多东西,首先你不会得到你无法访问的符号的完整堆栈跟踪,为此你需要没有删除私有符号的pdbs。
对于在WinDbg中输入'.symfix; .reload'的微软符号应解决该问题。
其次,虽然您不会为自己的应用程序dll获得第三方dll的堆栈跟踪,但您需要确保带有公共符号的pdbs与用于生成转储的版本匹配。
您可以要求客户在gflags中生成用户堆栈跟踪并重现错误或向您发送带有完整符号信息的pdbs。
也可以在Visual Studio中打开转储文件:
您可能会发现这种方法比较熟悉,但您无法访问WinDbg工具,但由于这是一个事后分析,您可以在Visual Studio和WinDbg中打开转储,因为您无论如何都没有进行有创调试。