Exibindo informações de depuração de exceção para usuários

Atualmente estou trabalhando na adição de exceções e manipulação de exceção ao meu aplicativo OSS. Exceções foram a idéia geral desde o início, mas eu queria encontrar uma boa estrutura de exceção e, com toda a honestidade, entender as convenções e os idiomas de manipulação de exceção do C ++ um pouco melhor antes de começar a usá-las. Eu tenho muita experiência com C # / .net, Python e outras linguagens que usam exceções. Não sou estranho à ideia (mas longe de ser um mestre).

Em C # e Python, quando ocorre uma exceção não tratada, o usuário obtém um bom rastreio de pilha e, em geral, muitosmuito útil inestimável depuração de informações. Se você está trabalhando em um aplicativo OSS, ter os usuários colando essa informação nos relatórios de problemas é ... bem, vamos apenas dizer que estou achando difícil viver sem isso. Para este projeto C ++, eu recebo "O aplicativo caiu", ou de usuários mais informados, "Eu fiz X, Y e Z e, em seguida, ele caiu". Mas eu quero essa informação de depuração também!

Eu já (e com grande dificuldade) fiz a minha paz com o fato de que eu nunca verei uma maneira multiplataforma e cross-compilador de obter um rastreamento de pilha de exceção C ++, mas sei que posso obter o nome da função e outros informação relevante.

E agora eu quero isso para minhas exceções sem tratamento. estou a usarboost :: exception, e eles tem isso muito legaldiagnostic_information thingamajig que pode imprimir o nome da função (não-manipulada), arquivo, linha e, o mais importante, outras informações específicas de exceção que o programador adicionou àquela exceção.

Naturalmente, eu estarei lidando com exceções dentro do código sempre que puder, mas não sou tão ingênuo para pensar que não deixarei um casal passar despercebido (sem querer, é claro).

Então, o que eu quero fazer é envolver meu ponto de entrada principal dentro de umtry bloquear com umcatch Isso cria uma caixa de diálogo especial que informa ao usuário que ocorreu um erro no aplicativo, com informações mais detalhadas apresentadas quando o usuário clica em "Mais" ou "informações de depuração" ou qualquer outra coisa. Isso conteria a string de diagnostic_information. Eu poderia então instruir os usuários a colar essas informações nos relatórios de problemas.

Mas um sentimento instintivo está me dizendo que embrulhar tudo em um bloco try é realmente uma má ideia. É o que eu estou prestes a fazer estúpido? Se for (e mesmo que não seja), qual é a melhor maneira de conseguir o que eu quero?

questionAnswers(4)

yourAnswerToTheQuestion