首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取"!htrace -diff“结果中堆栈跟踪的所有帧?

如何获取"!htrace -diff“结果中堆栈跟踪的所有帧?
EN

Stack Overflow用户
提问于 2014-12-09 20:54:05
回答 2查看 578关注 0票数 0

看起来"!htrace -diff“只能显示16帧。如何增加堆栈跟踪中的帧数?以下是!htrace -diff检测到的一个泄漏的句柄。如果没有完整的堆栈跟踪,我无法从中读取任何内容。

代码语言:javascript
复制
Handle = 0x00000f7c - OPEN
Thread ID = 0x00001cc4, Process ID = 0x00009f20

0x01b8dad8: +0x01b8dad8
0x018c6e93: +0x018c6e93
0x7788179a: +0x7788179a
0x000a20bb: +0x000a20bb
0x753ab069: +0x753ab069
0x7539cf87: +0x7539cf87
0x75322776: +0x75322776
0x7539d07e: +0x7539d07e
0x7539c549: +0x7539c549
0x778ae707: +0x778ae707
0x7785c32e: +0x7785c32e
0x77a2ff66: ntdll!ZwCreateEvent+0x00000012
0x69bffc58: verifier!AVrfpNtCreateEvent+0x0000006b
0x77390d93: KERNELBASE!CreateEventExW+0x0000006e
0x773911c6: KERNELBASE!CreateEventW+0x00000027
0x69bffd8f: verifier!AVrfpCreateEventW+0x00000078
EN

回答 2

Stack Overflow用户

发布于 2014-12-09 22:54:28

This link指向this one,它告诉我们它基本上是硬编码的。

堆栈跟踪的最大深度目前硬编码为16 (尽管将来可能会改变)。此外,这还包括堆栈跟踪的内核模式部分的一些条目。内核或驱动程序开发人员可以通过在内核调试器中使用!htrace来显示这些堆栈跟踪条目。因此,为每个跟踪获取大约11个用户模式条目听起来很准确。

票数 0
EN

Stack Overflow用户

发布于 2014-12-10 04:09:02

不幸的是,你不能。

假设您正确地设置了符号,我认为可能出现以下情况

!htrace报告的某些跟踪可能来自不同的进程上下文。在这种情况下,返回地址可能无法在当前进程上下文中正确解析,或者可能解析为错误的符号。

来源: WinDbg帮助(.hh !htrace)

如果一个不同的进程将句柄注入到您的进程中,并且地址与该进程相关,就会发生这种情况。在这种情况下,!htrace列出的进程ID与您正在调试的进程不匹配(输入| (pipe)获取进程ID)。

在这种情况下,您可以附加到进程(.attach 0x<pid>,此处默认为0n ),并尝试从那里获取剩余的callstack,但我自己从未这样做过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27379455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档