Это зависит от того, что вы ищете, но отладка многопоточных приложений может быть очень похожа или сильно отличаться от отладки однопоточных приложений.
Во-первых, некоторые примеры методов, которые вы все еще можете использовать:
- Используйте точки останова с IDE
- Используйте различные solid соответствующие инструменты отладки, такие как Valgrind. Вот ссылка на хорошую статью, полную инструментов: C ++ TUTORIAL MULTI-THREADED PROGRAMMING DEBUGGING - 2020
- Вывод в отдельные файлы ИЛИ использовать блокировки при выводе в тот же файл / поток (не рекомендуется но коснусь этого)
Я предполагаю, что проблема, с которой вы столкнулись здесь с printf, заключается в том, что это похоже на запись нескольких потоков в один и тот же файл - это условие гонки для того, какой результат вы увидите на экране. Я лично по-прежнему рекомендую использовать такой инструмент, как valgrind, если вы столкнулись с многопоточной ошибкой, но если вы хотите продолжить использование простого вывода в консоль, попробуйте ...
- Написать в другой файлы вместо стандартного вывода / консоли
- Используйте блокировку / мьютекс, чтобы гарантировать, что только 1 поток одновременно записывает в стандартный вывод (что может маскировать состояние гонки или такие проблемы из-за добавления блокировки для этого блокировка перед печатью)
- Более дикая идея: разделить состояние (через блокировку, чтобы избежать одновременного чтения или записи данных несколькими потоками) или иным образом вернуть вывод в один поток, предназначенный для записи ваша отладочная информация. Подобно вышеприведенному, но немного отличается по реализации и полезно, если вы хотите создать специализированную многопоточную систему журналов для будущих улучшений.
В целом, точный инструмент, который вы должны использовать здесь, зависит от точная проблема, с которой вы столкнулись, и поэтому пока нет четких рекомендаций. Пожалуйста, примените указанные выше инструменты (включая точки останова в Eclipse) в соответствии с вашей ситуацией.