У меня есть программа .NET Core 2.0 C #, которая запускает другую программу .NET Core 2.0 C #. Я хочу автоматически присоединить отладчик VS 2017 к подпроцессу, либо сразу после его запуска, либо в определенный момент его выполнения.
Я попытался добавить вызов System.Diagnostics.Debugger.Launch
к коду подпроцесса, и это вызывает диалоговое окно отладчика VS JIT, но:
- Если я не проверяю «Вручную выбрать движки отладки», то отлаживается только нативный код. Как и ожидалось, процесс остановлен на точке останова, но я не могу отладить свой код C #.
- Если я проверяю это и проверяю «Управляемый», я все равно не могу снять флажок «Собственный» - он говорит: «Чтобы отладчик обрабатывал текущее исключение, должен быть выбран код« Собственный »». Затем он запускает отладку в смешанном режиме, но не входит в режим прерывания. Если я прерву работу вручную, я увижу, что поток, вызвавший Debugger.Launch, имеет следующую трассировку стека:
ntdll.dll!ZwWaitForMultipleObjects()
KernelBase.dll!WaitForMultipleObjectsEx()
kernel32.dll!WaitForMultipleObjectsExImplementation()
[Managed to Native Transition]
(my method that called System.Diagnostics.Debugger.Launch)
Он просто «застрял» в этом методе, и я не могу выйти из этого, чтобы продолжить работу моего управляемого потока, так что это совершенно бесполезно.
Как мне присоединить отладчик таким образом, чтобы я мог остановиться на точке останова, проверить управляемые переменные и затем продолжить?