2

我在调试时找到了一个地址,我怀疑它属于某个进程的某个线程的调用堆栈。

找出它是哪个线程的最佳方法是什么(或者那是我的假设是错误的)?

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

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

提前致谢。

4

1 回答 1

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替换为您要查找的地址)

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

于 2012-12-10T18:23:49.033 回答