Valgrind

  1. Типичные ошибки при использовании памяти: утечки, выход за границу массива, использование неинициализированных значений. Их возможные последствия.
  2. Ошибки в многопоточных приложениях: "состояние гонки" (data races), "тупики" (deadlocks). Их возможные последствия.
  3. Инструменты для поиска ошибок при использовании памяти и многопоточных ошибок.

Git

  1. Системы управления версиями: понятие (расплывчатое).
  2. Системы управления версиями: основные задачи.
  3. Системы управления версиями: основные операции.
  4. Централизованные системы управления версиями.
  5. Распределённые системы управления версиями: основные понятия, концепции.
  6. Распределённые системы управления версиями: сравнение с централизованными.
  7. Git: основные принципы и отличительные черты.
  8. Git: ветви и удалённые репозитории.
  9. Git: методы синхронизации репозиториев.
  10. Распределённые системы управления версиями: модели совместной разработки.

buildbot

  1. Сборочные системы: понятие, основные задачи, примеры реализаций.
  2. Buildbot: схема работы, основные компоненты.
  3. Buildbot: интерфейсы уведомлений.

Doxygen

  1. Документирование кода: цели, классификация по Макконнеллу, способы.
  2. Генерация документации к проекту на основе комментариев к коду: цели, ограничения.
  3. Doxygen: сфера применения, принципы работы, функциональность. Отличия от javadoc.

GDB

  1. Интерактивная runtime-отладка приложений: цели, функциональность.
  2. Инструмент GDB: функциональность, примеры команд, фронтэнды.

Strace/Ltrace

  1. Системные вызовы в Си и UNIX: классификация функций Glibc по отношению к вводу-выводу, принципы работы механизма системных вызовов.
  2. Инструмент strace: цели, функциональность, ограничения.
  3. Инструмент ltrace: цели, отличия от strace, ограничения.
  4. Принципы динамического связывания в GNU/Linux. Переменные окружения. Механизм отладки специфических внешних вызовов.