Когда-то я использовал много кода для отладки. Я почти целиком ориентировался на Windows, поэтому было много этой функции вывода строки отладки, которую я не помню, как писать по буквам, поэтому я мог записать трассировку с помощью конкретной программы.
Некоторый отладочный код остался на месте, а именно то, что предназначалось для вложения вызовов. Однако, хотя вещь отладочной строки в производственной системе в основном не видна, все это было сделано при условной компиляции.
Однако реальность такова, что весь этот отладочный код был огромным усилием для чего-то, что в идеале обрабатывается другим способом - с использованием, конечно, отладчика. В то время я не был впечатлен отладчиком Borland C ++. Инструменты были там, но они слишком часто давали вводящие в заблуждение результаты, и использование отладчика без IDE (часто необходимого) означало запоминание сочетаний клавиш, что отвлекало от работы.
Единственный худший отладочный опыт - это GDB из командной строки.
Конечно, важно быть экспертом в работе с инструментами, которые вы используете каждый день, но отладка не должна быть тем, чем вы занимаетесь каждый день. Если вы используете отладчик так часто, у вас все в порядке с изучением десятков команд и / или сочетаний клавиш, что кажется мне немного красным флажком.
К тому времени, когда я работал в Visual Studio 7, стало ясно, что отладка может быть очень практичной и эффективной. Если вы можете выполнить отладку в Visual Studio (включая экспресс-выпуски), отладка очень проста. Без сомнения, если вы сможете найти подходящий интерфейс GUI / IDE, GDB также прост и эффективен, хотя я еще не выполнил этот поиск.
Также есть что сказать для модульного тестирования, с анализом покрытия с использованием gcov. Чем больше вы уверены в поведении ваших библиотек, тем менее глубокой должна быть ваша отладка - и тем реже вам понадобится отладчик. И написание юнит-тестов - это вполне разумная вещь, которой вы должны заниматься большую часть дня.
Неожиданно важный инструмент = cmake, инструмент сборки, который позволяет мне, между прочим, легко переключаться между сборкой для GCC и для VC ++. Таким образом, я могу проводить модульное тестирование и покрытие на основе gcov с помощью GCC, но легко переключаюсь на VC ++, чтобы использовать отладчик.