現在、OSSアプリケーションに例外と例外処理を追加する作業を行っています。例外は最初から一般的な考え方でしたが、私は優れた例外フレームワークを見つけたいと思っていました。正直なところ、C ++の例外処理の規則とイディオムを、使用を開始する前にもう少しよく理解してください。私は、C#/。Net、Python、および例外を使用するその他の言語について多くの経験があります。私はそのアイデアに不思議ではありません(しかし、マスターからはほど遠いです)。
C#とPythonでは、未処理の例外が発生すると、ユーザーは優れたスタックトレースを取得し、一般に非常に有用な貴重なデバッグ情報を多数取得します。OSSアプリケーションで作業している場合、ユーザーにその情報を問題レポートに貼り付けることは...まあ、それなしでは生きていけないと思っているとだけ言っておきましょう。このC++プロジェクトでは、「アプリケーションがクラッシュしました」、またはより多くの情報を持っているユーザーから「X、Y、Zを実行した後、クラッシュしました」というメッセージが表示されます。しかし、私もそのデバッグ情報が欲しいです!
クロスプラットフォームとクロスコンパイラの方法でC++例外スタックトレースを取得する方法は見当たらないという事実で、私はすでに(そして非常に困難に)安心していますが、関数名などを取得できることはわかっています。関連情報。
そして今、私は未処理の例外のためにそれを望んでいます。私はboost::exceptionを使用していますが、この非常に優れたdiagnostic_information thingsamajigを使用して、(マングルされていない)関数名、ファイル、行、そして最も重要なことに、プログラマーがその例外に追加したその他の例外固有の情報を出力できます。
当然、可能な限りコード内で例外を処理しますが、カップルをすり抜けさせないようにするのはそれほど単純ではありません(もちろん、意図せずに)。
したがって、私がやりたいのは、メインのエントリポイントをtry
ブロック内にラップcatch
して、アプリケーションでエラーが発生したことをユーザーに通知する特別なダイアログを作成し、ユーザーが[詳細]または[デバッグ]をクリックすると、より詳細な情報が表示されるようにすることです。情報」など。これには、diagnostic_informationの文字列が含まれます。次に、この情報を問題レポートに貼り付けるようにユーザーに指示できます。
しかし、しつこい腸の感覚は、すべてをtryブロックでラップすることは本当に悪い考えだと私に言っています。私がやろうとしていることは愚かですか?もしそうなら(そしてそうでなくても)、私が望むことを達成するためのより良い方法は何ですか?