Отображение исключительной отладочной информации пользователям

В настоящее время я работаю над добавлением исключений и обработкой исключений в мое приложение OSS. Исключения были основной идеей с самого начала, но я хотел найти хорошую структуру исключений и, честно говоря, лучше понять соглашения по обработке исключений C ++ и идиомы, прежде чем начать их использовать. У меня большой опыт работы с C # /. Net, Python и другими языками, которые используют исключения. Я не чужд этой идее (но далеко не мастер).

В C # и Python, когда возникает необработанное исключение, пользователь получает хорошую трассировку стека и в целом многоочень полезно бесценная отладочная информация. Если вы работаете над приложением OSS, то, чтобы пользователи вставляли эту информацию в отчеты о проблемах ... ну, скажем так, мне трудно жить без этого. Для этого проекта C ++ я получаю «Приложение рухнуло», или от более информированных пользователей: «Я сделал X, Y и Z, а затем оно рухнуло». Но я тоже хочу эту отладочную информацию!

Я уже (и с большим трудом) примирился с тем, что никогда не увижу кроссплатформенный и кросс-компиляторный способ получения трассировки стека исключений в C ++, но я знаю, что могу получить имя функции и другие релевантная информация.

И теперь я хочу это для моих необработанных исключений. я используюповышение :: исключениеи у них это очень милоdiagnostic_information штука, которая может распечатать (не исправленные) имя функции, файл, строку и, самое главное, другую информацию, специфичную для исключения, которую программист добавил к этому исключению.

Естественно, я буду обрабатывать исключения внутри кода всякий раз, когда смогу, но я не настолько наивен, чтобы думать, что не позволю паре проскользнуть (непреднамеренно, конечно).

Так что я хочу сделать, это обернуть мою основную точку входа вtry блок сcatch это создает специальный диалог, который информирует пользователя о том, что в приложении произошла ошибка, с более подробной информацией, представляемой, когда пользователь нажимает «Дополнительно» или «Отладочная информация» или что-то еще. Это будет содержать строку из диагностической_информации. Затем я мог бы поручить пользователям вставлять эту информацию в отчеты о проблемах.

Но ворчливое чувство говорит мне, что завернуть все в блок try - это действительно плохая идея. Что я собираюсь сделать глупо? Если это так (и даже если это не так), как лучше достичь того, чего я хочу?

Ответы на вопрос(4)

Ваш ответ на вопрос