У меня есть многопоточное приложение, которое я отлаживаю в IDE (Visual Studio 2008, Win7-64, C ++).
В целях «отладки» я «притворяюсь», что всегда имеюодин процессор (программа определяет количество локальных процессоров), но проект программы устанавливает минимум из двух потоков (например, «основной поток», который обрабатывает GUI и трафик событий, и вторую »обработку)msgstr "нить, где работа перемещена из" основной нити "). (В «производственной» сборке будет один основной поток и один или несколько «обрабатывающих» потоков в зависимости от количества обнаруженных процессоров.)
ВЫПУСК: Точки останова в коде (в среде IDE) иногда срабатывает, а иногда нет.Повторный запуск программы может «поймать» точку останова, когда предыдущий запуск не «поймал» (изменения исходного кода или перестройка не выполняются, чтобы увидеть это поведение изменения в точке останова, путь выполнения программыидентичны).
(Меня больше всего интересуют триггерные точки в не-GUI / не основном потоке, но я предполагаю, что это не имеет значения.)
ВОПРОС: Есть ли способ сделать эти точки останова более "надежными"?(Что влияет на то, «остановится» ли точка останова?)
Я знаю и НЕ заинтересован в следующем:
- Источник не доступен-синхронизация с последним связанным исполняемым файлом
- Сборка не является «отладочной» (символы отладки недоступны)
- Требуется «Чистая сборка» (устаревшие артефакты отладки)
- «Step Over / Into» может не работать должным образом, когда другой поток «разрывается» во время операции пошагового выполнения этого первого потока
В веб-поисках упоминалось, что возможно установка параметра компилятора на «x86
"а не" Any Processor
"для отлова точек останова, не уверен, почему это может иметь значение ...?
Наконец, да, конечно, вся логика" должна "быть проверена в однопоточном приложении (например, перефакторинг для обеспечения детерминированного однопоточного исполнения для модульных и регрессионных тестов).Однако для текущего тестирования мне нужно , чтобы быть в «реальном» приложении (например, «интеграционное тестирование» или «системная интеграция»).