Member 12584105 Ответов: 1

Как отладить многопоточное приложение на C++?


пожалуйста, поделитесь, есть ли какие-либо методы для отладки многопоточного приложения на C++? моя основная потребность включает в себя-какой инструмент использовать, каково состояние других потоков, когда произошел сбой, как узнать состояние отсоединенных потоков.

Что я уже пробовал:

попытался увидеть вывод gdb "backtrace", но не очень полезно.

1 Ответов

Рейтинг:
8

KarstenK

Вы должны отлаживать их, как и любое другое приложение на C++, но есть несколько советов.

Хороший подход часто заключается в том, чтобы сначала запустить и отладить все потоки в одном потоке (как вызов функции), чтобы найти проблемы, а затем "передать" функцию stabil на аутсорсинг в потоке. Отсоединенный поток должен выйти из выполнения. Сделайте некоторый вывод в точке выхода.

Вы можете писать в системные журналы и включать идентификатор thraed или в собственный файл журнала, но другой для каждого потока. Назовите их после идентификатора потока. Установите точку останова перед началом отладки.

Самая большая проблема часто заключается в синхронизации между потоками, поэтому пользователи получают доступ к общим данным или файлам. Статья Синхронизация потоков для начинающих дает хороший обзор различных технологий. Поймите и изучите эти профессиональные технологии: они делают многопоточность безопасной. Используйте некоторые статические глобальные данные для данных общего потока.

Мой повседневный опыт таков НИКОГДА чтобы выделить и освободить байт в разных потоках: память остается в потоке. Копируйте его, когда это необходимо!!!