我在调试时找到了一个地址,我怀疑它属于某个进程的某个线程的调用堆栈。
找出它是哪个线程的最佳方法是什么(或者那是我的假设是错误的)?
PS我本可以使用!process
,然后.process
反复使用!thread
,但必须有更好的方法。
PSS 不幸的是,我无法在用户模式调试时重现这种情况。
提前致谢。
首先,如果您加载了符号,您可以使用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替换为您要查找的地址)
希望这可以满足您的需求,或者至少可以将您指向编写解决方案的脚本。