Отладка многопоточного приложения с помощью eclipse cdt - PullRequest
0 голосов
/ 04 августа 2020

Я разрабатываю многопоточное приложение на c ++, используя eclipse cdt. Мне нужно отладить свой код, я пытался писать на консоль с помощью printf, но это не очень полезно. Как мне отладить свой многопоточный код?

1 Ответ

0 голосов
/ 04 августа 2020

Это зависит от того, что вы ищете, но отладка многопоточных приложений может быть очень похожа или сильно отличаться от отладки однопоточных приложений.

Во-первых, некоторые примеры методов, которые вы все еще можете использовать:

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

Я предполагаю, что проблема, с которой вы столкнулись здесь с printf, заключается в том, что это похоже на запись нескольких потоков в один и тот же файл - это условие гонки для того, какой результат вы увидите на экране. Я лично по-прежнему рекомендую использовать такой инструмент, как valgrind, если вы столкнулись с многопоточной ошибкой, но если вы хотите продолжить использование простого вывода в консоль, попробуйте ...

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

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

...