WPF Передайте отладчик только что созданному процессу

У меня есть приложение, которое порождает новый процесс. При разработке приложения я хотел бы привязать отладчик к новому процессу. В настоящее время я могу сделать это с помощью функции Visual Studios Attach to Process, но каждый раз, когда мне нужно протестировать небольшое изменение в коде, возвращаться и прикреплять его вручную очень сложно.

Можно ли создать новый процесс с помощью Process.Start, а затем подключить любые отладчики, которые в настоящее время подключены к текущему процессу, к новому процессу?

I.E.:

Запустить Process1 с включенной отладкой
Process1 запускает Process2
Process1 подключает отладчик к Process2


person Robert Petz    schedule 29.07.2013    source источник
comment
является ли новый процесс программой C#, программой C++ и т. д.?   -  person Mike Corcoran    schedule 29.07.2013
comment
новая программа - это программа С#   -  person Robert Petz    schedule 29.07.2013
comment
@MikeCorcoran - как бы вы сделали то же самое, если бы это была программа на C++, порожденная программой на C#?   -  person DanCaveman    schedule 12.10.2018


Ответы (2)


Не очень чистое решение, но вы можете сделать что-то вроде этого:

  • В Process1, если вы работаете в режиме отладки (Debugger.IsAttached), передайте аргумент Process2 (например, process2.exe /debug)
  • В Process2, если процесс запущен с аргументом /debug, прикрепите отладчик из кода (Debugger.Launch())
person Thomas Levesque    schedule 29.07.2013

Как FYI для всех, кто смотрит на это, вот реализация кода (принятого) ответа Томаса Левеска:

Код

Запуск приложения:

Process.Start(/** Path to assembly **/, System.Diagnostics.Debugger.IsAttached ? "/Debug" : "");

Целевое приложение:

if (Environment.GetCommandLineArgs().Contains("/Debug"))
    System.Diagnostics.Debugger.Launch();

Это приведет к тому, что большинство экземпляров Visual Studio предложит вам это при запуске нового процесса:

введите здесь описание изображения

Это нормально... просто нажмите "Да, отладить [имя сборки]". В следующем окне вам будет предложено выбрать отладчик для подключения, который обычно по умолчанию используется для отладчика, который изначально использовался для запуска запускаемого приложения.

person Robert Petz    schedule 29.07.2013
comment
Вы можете упростить тест в целевом приложении: if (Environment.GetCommandLineArgs().Contains("/Debug")) - person Thomas Levesque; 30.07.2013
comment
согласен ... Я всегда делаю запросы к базе данных с linq для объектов, поэтому я всегда возвращаюсь к FirstOrDefault, проверяя свойство первичного ключа, лол, должен помнить, что это не всегда необходимо ... - person Robert Petz; 30.07.2013