windbg中有没有办法打印当前的线程ID和帧ID?

Der*_*rek 3 windbg

一点跟进:有没有办法迭代windbg中的所有帧?

~*e .echo Thread Frames and Locals:; !for_each_frame dv
Run Code Online (Sandbox Code Playgroud)

有没有办法回应如下:当前线程#{ThreadID}当前帧#{帧号}

我找不到任何代表当前帧号或线程号的变量.

.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
Run Code Online (Sandbox Code Playgroud)

但我想看看windbg线程ID.同样,我希望看到一个遍历所有线程和框架的示例,并打印如下内容:

当前线程#00当前帧#01

sno*_*one 6

我不认为你可以关闭什么!for_each_frame告诉你,你只能添加它.所以,例如:

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

给你一些接近的东西,但输出中仍然有一些垃圾.如果您编写自己的扩展,则可以获得更大的灵活性.

  • 那个命令对我来说很好.尝试更新你的WinDbg版本,最新版本是6.2.9200(是的,比6.11更新) (2认同)