Подключите управляемый отладчик к подпроцессу .NET Core в коде C # - PullRequest
0 голосов
/ 02 мая 2018

У меня есть программа .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)

Он просто «застрял» в этом методе, и я не могу выйти из этого, чтобы продолжить работу моего управляемого потока, так что это совершенно бесполезно.

Как мне присоединить отладчик таким образом, чтобы я мог остановиться на точке останова, проверить управляемые переменные и затем продолжить?

1 Ответ

0 голосов
/ 16 мая 2018

Debug.Assert, вероятно, самый простой, если им принадлежит второй процесс. Предполагая, что это доступно в .NET Core.

Вы можете найти здесь дополнительную информацию о том, почему их Debugger.Launch ведет себя так:

https://blogs.msdn.microsoft.com/jmstall/2006/02/16/ifeo-and-managed-debugging/

...