2013-05-02 40 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

相關問題