Как установить текущий поток при использовании windbg - PullRequest
0 голосов
/ 08 апреля 2019

Анализ аварийного дампа с использованием windbag. Необходимо установить код для перехода к текущему потоку. Я пытался сделать ~ поток 5a0.b44, но это не сработало. Это дает мне сообщение об ошибке "Нет ошибки запускаемых отладчиков n в '~ thread 5a0.b44'. Мне нужно настроить дамп для отладки определенного потока. Как мне это сделать?

1 Ответ

2 голосов
/ 08 апреля 2019

Вы можете перечислить все темы, просто ~. Он покажет логические идентификаторы потоков и идентификаторы потоков ОС.

Вы можете выбрать поток по его логическому номеру, используя ~<number>s (s для выбора), и по идентификатору потока ОС, используя ~~[<number>]s.

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

Нельзя использовать идентификатор процесса вместе с идентификатором потока:

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
...