Регистрация Контекста Исключения

В ожидании День программиста и по следам День тестировщика Я хочу поговорить о том, как упростить им обоим жизнь в их общей задаче — разработке и отладке программного обеспечения.

А именно, я расскажу вам, как сделать исключения C++ более информативными, а протоколирование ошибок более компактным.

За полтора года работы с Java я привык к исключениям, содержащим StackTrace типа

  
 
 Exception in thread "main" java.lang.IllegalStateException: A book has a null property
         at com.example.myproject.Author.getBookIds(Author.java:38)
         at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
 Caused by: java.lang.NullPointerException
         at com.example.myproject.Book.getId(Book.java:22)
         at com.example.myproject.Author.getBookIds(Author.java:35)
         .

1 more

Перейдя на C++, через некоторое время меня поразило отсутствие информации об исключениях с точки зрения выявления причин ошибки и дальнейшей отладки.

Мне пришлось логировать прохождение всех важных пунктов программы, чтобы по логам понять, где именно что-то пошло не так и привело к исключению.

Далее я представлю упрощенную эволюцию ведения журналов, которую я прошел сам.

Оригинальная программа, которую мы будем отлаживать и улучшать

void foo(int a) {

Теги: #ведение журнала c++ #деструктор #исключения #c++ #logger #исключения #деструкторы #программирование #C++ #OOP

Вместе с данным постом часто просматривают: