Я ищу советы о том, как помочь в отладке, добавив код в мое приложение. Пример для того, чтобы стало более понятным, что мне нужно: для обнаружения висячих объектов, находящихся в shared_ptrs, я создал класс трекера, который позволяет мне отслеживать, сколько объектов живы и где они были изначально созданы, что затем используется так:
class MyClass {
TRACK_THIS_TYPE(MyClass);
};
boost::shared_ptr<MyClass> myObj(new MyClass);
TRACK_THIS_OBJECT(myObj);
где TRACK_THIS_TYPE (t) - это макрос, который гарантирует, что я получаю количество экземпляров (и количество созданных объектов) для класса, а TRACK_THIS_OBJECT - это макрос, в котором хранится файл и строка, в которой был создан объект вместе со слабым_птром к объекту.
Это позволяет мне обнаруживать висячие объекты и где они были созданы. Это не позволяет мне узнать, какие объекты содержат shared_ptr для моих объектов, что может быть улучшением вышеописанного. Я думаю, что можно создать что-то вроде макроса TRACK_THIS_PTR (T), в котором будут храниться файл и строка, в которой создается экземпляр shared_ptr.
Другим примером будет старый
assert(condition && "My descriptive text");
, который позволяет вам помещать значимые комментарии прямо в ваш аргумент.
Есть ли у кого-нибудь хитрые трюки на С ++ для сбора статистики, автоматических трассировок стека, отслеживания объектов / указателей / ресурсов, обнаружения тупиковых ситуаций / голодания или других проблем с многопоточностью, чтобы убедиться, что исключения где-то обрабатываются, помощь в документации или подобное? Все идет действительно, будь то что-то, что помогает предотвратить ошибки или что-то, что помогает после факта.
Редактировать: В дополнение к ответам на этот вопрос я получил советы о google-glog в качестве утилиты ведения журнала.