2013-05-02 38 views
2

的有点跟进:Is there a way to itereate through all frames in windbg?windbg有没有办法打印当前的线程ID和帧ID?

~*e .echo Thread Frames and Locals:; !for_each_frame dv 

有没有办法以呼应类似: 当前线程#{}线程ID当前帧#{帧数}

我找不到有关表示当前帧号或线程号的变量的任何信息。

.frame命令显示当前帧号。

举个简单的例子:如果我做的:~*e .thread

我得到的输出,如:

Implicit thread is now 000007ff`fffde000 
Implicit thread is now 000007ff`fffdc000 
Implicit thread is now 000007ff`fffd8000 
Implicit thread is now 000007ff`fffd6000 
Implicit thread is now 000007ff`ffefa000 

但我想看到WinDbg的线程ID。 同样,我希望看到,通过所有线程和框架,并打印类似云的例子:

当前线程#00帧#01

回答

5

我不认为你可以关闭什么!for_each_frame显示你,你只能添加到它。因此,例如:

~*e .printf "Thread is: 0x%x\n", @@c++(@$teb->ClientId.UniqueThread) ; !for_each_frame .printf "Frame is: %d\n", @$frame 

给了你一些东西,但输出中仍然有一些垃圾。如果您编写自己的扩展程序,您将拥有更大的灵活性。

+0

这是非常接近,但似乎有它的线程部分的错误。 即使我拿出框架部分 - 我不能只得到线程部分工作: '〜* e .printf“线程是:0x%x \ n”,@@ C++(@ $ teb- > ClientId.UniqueThread)' 给出: '0:031>〜* E .printf “线程是:0X%X \ n” 个,@@ C++(@ $ teb-> ClientId.UniqueThread) 线程是: 0x2c9c ^'〜* e .printf'线程中丢失的尾部引用是:0x%x ' ^'〜* e .printf'中缺少尾部引用线程是:0x%x' 第一个打印罚款,但接下来的不会。 – Derek 2013-05-02 21:20:41

+0

对不起,格式化。并感谢所有的帮助......我注意到你回答了我的最后一个问题:) – Derek 2013-05-02 21:22:13

+0

这可能是一个普通的windbg错误? '〜* e .printf“主题:0x%x \ n”,@ $ tid'似乎有同样的问题。 – Derek 2013-05-03 12:57:16

相关问题