#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), поскольку вам нужно было бы запускать и подключать из удаленной системы. Там слишком много проблем…