Отладка мультипроектных (C ++) решений в Visual Studio 2005 - PullRequest
1 голос
/ 24 октября 2008

В настоящее время я разрабатываю приложение, которое состоит из пяти отдельных исполняемых файлов, которые взаимодействуют через ActiveMQ. У меня есть решение Visual Studio, которое содержит пять исполняемых проектов. Один из проектов (launcher.exe) запускает остальные четыре проекта из своих локальных папок как отдельные процессы. Таким образом, проект запуска устанавливается как «Startup Project», и, в результате, это единственный, который я могу установить точки останова и отладки из-за моего ограниченного знания VS2005.

Есть ли способ установить несколько точек останова для моих пяти проектов c ++ в одном решении VS и отладить их одновременно, если проект запуска является единственным проектом, выполняемым из VS?

Примечание: Запуск новых экземпляров каждого проекта вручную через Visual Studio невозможен, поскольку их выполнение должно синхронизироваться с помощью launcher.exe.

Я прошу прощения, если это запутанно, это лучшее, что я могу объяснить. Заранее спасибо за помощь!

Ответы [ 3 ]

5 голосов
/ 24 октября 2008

Что вам нужно, так это в меню «Инструменты»: «Присоединить к процессу». Это дает вам список запущенных процессов и позволяет вам присоединить ваш отладчик к этим процессам.

Для локальной отладки Transport и Qualifier должны сохранять свои значения по умолчанию. Значение Attach To, расположенное чуть выше списка, определяет, какой тип отладки вы будете выполнять (нативные или управляемые являются наиболее распространенными типами), и, как правило, отладчик также может найти здесь хорошее значение по умолчанию.

Основная интересная часть - это список процессов - ищите в этом списке подпроцессы, которые вы хотите отлаживать. После того как вы нашли и выбрали процесс, нажмите «Присоединить» в правом нижнем углу (или просто дважды щелкните процесс), и отладчик подключится к этому процессу и начнет его отладку.

Возможно, вы также захотите включить панель инструментов «Местоположение отладки», которая позволяет изменить фокусировку отладчика на различные процессы и потоки, к которым вы подключены. Отладка нескольких процессов в одном экземпляре Visual Studio может быть сложной, поэтому вы всегда можете рассмотреть возможность запуска отдельных экземпляров для отладки каждого отдельного процесса.

Другим сложным аспектом этого может быть отладка начального запуска подпроцессов. Часто вещь, которую вы хотите отладить, происходит до того, как вы можете подключить отладчик, поэтому вам нужен какой-то способ заставить процесс ждать, пока вы не будете готовы. Простой способ сделать это в C ++ - использовать функцию IsDebuggerPresent. Попробуйте добавить этот код в самое начало вашей функции main () (или эквивалентной):

while( !IsDebuggerPresent() )
    Sleep( 500 );

Или попробуйте этот код для C #:

while( !System.Diagnostics.Debugger.IsAttached )
    System.Threading.Thread.Sleep( 500 );
1 голос
1 голос
/ 24 октября 2008

Вы можете выбрать по одному, запустив панель запуска вручную (вне Visual Studio или с помощью ), а затем подключившись к процессу, который вы хотите отлаживать, после его запуска. Если это один из проектов в вашем решении, вы можете установить точки останова, и они будут обнаружены при подключении отладчика.

...