在Windbg内核调试期间将地址与堆栈匹配

时间:2012-12-10 08:40:16

标签: kernel windbg callstack

我有一个调试时发现的地址,我怀疑它属于某个进程的某个线程的调用堆栈。

找出哪个主题的最佳方法是什么(或者我的假设是假的)?

P.S。我可以反复使用!process然后再使用.process!thread,但必须有更好的方法。

P.S.S。不幸的是,我无法在用户模式调试时重现这种情况。

提前致谢。

1 个答案:

答案 0 :(得分:0)

首先,如果您加载了符号,则可以使用ln <address>从地址中收集一些信息。从那里开始,不应该猜测涉及哪个进程/线程。

如果这不符合您的要求,您可以继续采用强力方法。搜索的最佳选择是以更易搜索的格式自动获取调用栈。以下内容将把它们全部写入一个文件,您可以使用自己喜欢的文本编辑器轻松搜索。

.logopen c:\stacks.txt; !for_each_process "!process @#Process; ~*kv1000"; .logclose

这需要一段时间,所以去喝点咖啡。如果您感到幸运,可以直接从windbg搜索输出:

.shell -ci "!for_each_process \"!process @#Process; ~*kv1000\"" findstr "deadbeef"

(将 deadbeef 替换为您要查找的地址)

希望这可以满足您的需求,或者至少指出您编写解决方案的脚本。