Я думаю, что самый простой и самый оптимальный вариант - использовать ведение журнала (ну, на самом деле я использую отладочные отпечатки, но я думаю, что это не главное). Самым большим преимуществом является то, что вы можете проверять данные любого типа, много раз за выполнение программы, а затем искать их в текстовом редакторе, чтобы найти интересные данные. Обратите внимание, что это очень быстро. Недостаток очевиден, вы должны предварительно выбрать данные, которые вы хотите регистрировать и места, где регистрировать. Однако это не такая серьезная проблема, потому что вы обычно знаете, где в коде происходят плохие вещи (а если нет, то вы просто добавите проверки исправности тут и там и тогда, вы будете знать).
Проверенные / отладочные библиотеки хороши, но они лучше в качестве инструмента тестирования (например, запустите его и посмотрите, делаю ли я что-то не так), и не так хороши в отладке конкретной проблемы. Они не могут обнаружить ошибку в коде пользователя.
В противном случае я использую обычный GDB. Это не так плохо, как кажется, хотя это может произойти, если вы напуганы "print x
" печатью ненужного мусора. Но, если у вас есть отладочная информация, например, печать элемента работы std::vector
и, если что-то не получается, вы все равно можете проверить необработанную память с помощью команды x
. Но если я знаю, что я ищу, я использую вариант 1 - ведение журнала.
Обратите внимание, что "трудными для проверки" структурами являются не только STL / Boost, но и другие библиотеки, такие как Qt / KDE.