使用windbg时如何设置当前线程

时间:2019-04-08 18:01:32

标签: multithreading windbg dump

使用风袋分析故障转储。需要设置代码以转到当前线程。我尝试做〜线程5a0.b44,但这没有用。它给我一个错误“'〜线程5a0.b44'中没有可运行的调试错误n。我需要设置转储来调试特定的线程。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以仅按~列出所有线程。它将显示逻辑线程ID和OS线程ID。

您可以使用~<number>s(通过选择s)通过其逻辑编号选择线程,并使用~~[<number>]s通过其操作系统线程ID选择线程。

0:000> ~
.  0  Id: 1ee0.2270 Suspend: 1 Teb: 0000008c`1373b000 Unfrozen
   1  Id: 1ee0.2b18 Suspend: 1 Teb: 0000008c`1373d000 Unfrozen
   2  Id: 1ee0.1d44 Suspend: 1 Teb: 0000008c`1373f000 Unfrozen
   3  Id: 1ee0.1a1c Suspend: 1 Teb: 0000008c`13741000 Unfrozen
0:000> ~1s
ntdll!NtWaitForWorkViaWorkerFactory+0x14:
00007fff`32522fe4 c3              ret
0:001> ~~[1d44]s
ntdll!NtWaitForWorkViaWorkerFactory+0x14:
00007fff`32522fe4 c3              ret
0:002> *** on thread 2 now

您不能同时使用进程ID和线程ID:

0:002> ~~[1ee0.1a1c]s
Syntax error at '1ee0.1a1c]s'
0:002> ~~[1ee01a1c]s
                  ^ Illegal thread error in '~~[1ee01a1c]s

如果需要切换过程,请使用|<number>s|~[<number>]s

0:003> |
.  0    id: 1ee0    examine name: C:\Windows\System32\ApproveChildRequest.exe
#  1    id: 1e9c    attach  name: C:\Program Files\paint.net\PaintDotNet.exe
0:003> |~[1e9c]s
ntdll!DbgBreakPoint:
00007fff`32523060 cc              int     3
1:026> *** on process 1 now