Многоцелевая отладка не работает в WinDbg?

Я пытаюсь отладить два процесса в одном экземпляре WinDbg.

Я хотел запустить один из процессов, но g не похоже, связано с выбранным процессом (|0s, |1s). Я могу запустить отдельные темы с ~6g синтаксис, в этом случае другие потоки заморожены. Однако даже если поток 6 запущен сейчас, командная строка WinDbg теперь отключена, поэтому я не могу запустить другие потоки.

Я также заметил, что WinDbg не может выполнять g больше, когда один из двух процессов закончился. Затем WinDbg заявляет, что не может найти что-то для запуска:

0:000> |0s
0:000> k
 # ChildEBP RetAddr  
00 0113f97c 000a58be ComparativeDebugging!main+0x97 [c:\...\comparativedebugging.cpp @ 13]
[...]
0:000> g
       ^ No runnable debuggees error in 'g'
0:000> |
.  0    id: 10e0    create  name: ComparativeDebugging.exe
#  1    id: 1eec    exited  name: ComparativeDebugging.exe
0:000> |1s
[...]
1:004> k
 # ChildEBP RetAddr  
00 00cff938 77027dde ntdll!NtTerminateProcess+0xc
[...]
1:004> |0s
[...]
0:000> g
       ^ No runnable debuggees error in 'g'
0:000> ~0g
         ^ No runnable debuggees error in '~0g'

Как видите, процесс 0 все еще находится в main() и процесс 1 завершен. Я не смог найти способ запустить процесс 0 до конца.

Другая проблема заключается в том, что я не могу отсоединиться от процесса 1 (который закончился), но я могу отсоединиться от процесса 0:

1:004> .detach
Detached
1:004> .detach
Detached
1:004> .detach
Detached
1:004> |
   0    id: 10e0    create  name: ComparativeDebugging.exe
.  1    id: 1eec    exited  name: ComparativeDebugging.exe
1:004> |0s
[...]
0:000> g
       ^ No runnable debuggees error in 'g'
0:000> .detach
eax=00000000 ebx=770da920 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=77046e9c esp=00cff93c ebp=00cffa14 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
ntdll!NtTerminateProcess+0xc:
77046e9c c20800          ret     8
Detached
1:004> |
.  1    id: 1eec    exited  name: ComparativeDebugging.exe

Следующее, что не работает, это .restart, По документации

CDB и WinDbg могут перезапустить целевое приложение, если отладчик изначально создал приложение. Вы можете использовать команду.restart, даже если целевое приложение уже закрыто.

В моем случае я запустил оба приложения с помощью WinDbg (одно через File/Open Executable, другое через .create) и я ожидал, что смогу перезапустить их по отдельности. Тем не менее, когда я выпускаю .restart Команда WinDbg завершает все процессы и перезапускает только тот, который был запущен с помощью File/Open Executable.

0:000> .create c:\...\ComparativeDebugging.exe
[...]
Create will proceed with next execution
0:000> g
[...]
0:000> |
.  0    id: 1fa0    create  name: ComparativeDebugging.exe
   1    id: 3a20    create  name: ComparativeDebugging.exe
0:000> |1s
1:004> .restart
CommandLine: "C:\...\ComparativeDebugging.exe" 5
[....]
ntdll!LdrpDoDebuggerBreak+0x2b:
7707ccbc cc              int     3
0:000> |
.  0    id: 3580    create  name: ComparativeDebugging.exe

Я делаю что-то не так или многоцелевая отладка серьезно повреждена в WinDbg?

Я использую WinDbg 10.0.10586.567 x86 на Windows 10.

0 ответов

Другие вопросы по тегам