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

#c #windows #visual-studio #debugging

#c #Windows #visual-studio #отладка

Вопрос:

Представьте, что у меня есть программа, которая запускает некоторые процессы (псевдокод)

 main() {
   p1 = Spawn( "ClientProcess" );

   WaitForEventFrom( p1 );
}
  

Можно ли определить, подключен ли ‘main’ к отладчику, и автоматически присоединить этот отладчик к клиентским процессам?

Дополнительный вопрос: можно ли это сделать без изменения исходного кода / исполняемых файлов?

(Примечание: я на Windows, использую VS2010. Но подойдет любой (приличный) отладчик)

Ответ №1:

Вы можете использовать IsDebuggerPresent(), чтобы узнать, выполняется ли отладка main ().

Но вы не можете перенаправить отладчик VS для отключения и повторного подключения к созданному процессу из отлаженного процесса.

Лучшее, что я могу себе представить, это создание нового экземпляра vs, пытающегося подключить его к clientprocess. Вероятно, было бы проще создать windbg и подключить его к ClientProcess, поскольку в командной строке есть поддержка pid и т.д.

Очевидно, что это также не сработало бы, если приложение отлаживается удаленно (CheckRemoteDebuggerPresent () возвращает true), поскольку вам нужно было бы запускать и подключать из удаленной системы. Там слишком много проблем…