Многоцелевая отладка не работает в 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.