2016-11-15 14 views
0

私はAtmelプロセッサからRaspberry Piに移植したい古いCベースのプロジェクトを持っています。C++の例外処理でCコードをラップするには?

書かれた時点では、C++はオプションではなく、すべてをC++に変換するにはあまりにも手間がかかりました。

いくつかの問題やクラッシュはCによって(簡単に)捕まえられないことがありますので、私のプログラムはちょうど死ぬでしょう。&期限切れになる前に最後のチャンスを送ろうと思います。復旧を試みていないし、エラーの詳細なしで暮らすこともできます。機器を訪問するようなメッセージが表示されている限り、

私は例外があればエラー検出が改善されると思います取り扱い。

私は、デバイスに行って完全なエラーログを取得し、ハードウェアをリセットするように警告するチャンスとして例外処理を使用することを考えています。Cはいつも、コードが爆発する

私は合計C++リライトをしたくないので、/catchmain()を入れれば十分でしょうか?

技術的には十分ですか、それとももっと処理する必要がありますか?

もっと詳細なエラー報告以外に、すべての(メジャー)機能を自分自身でラップすることで何かを得ることができるでしょうかtry/catch

+2

例外は 'throw'文によってスローされます。 Segフォルトは例外をスローする必要はありません。彼らは未定義の動作の症状です。 –

+1

セグメンテーションフォールトは、try/catch(...)によって捕捉されないことが保証されています。 実際には、Cスタイルのハンドラを指定してもセグメンテーションフォールトの後に続けるべきではありません。 私はあなたに広範なログと最高のための希望と各Cの関数の周りにtry/catchを追加することをお勧めします! – Rami

+0

私はseg faultと言ったことを忘れてください(しかし、+1、両方);それは悪い例でした&私は質問から削除します(私はNULLのパラメータをチェックしますが、すべての間接参照の前に必ずNULLをチェックするとは限りません)。しかし、@PeteBeckerの例外は例外ではありません*** ***はスローから発生し、それは私がキャッチしようとしているものです – Mawg

答えて

1

もっと詳細なエラー報告以外に、すべての(メジャー)機能を自分のtry/catchでラップすることで何かを得ることができますか?まず

、(あなたは、単にstd::throw_with_nested()を通じてより多くのコンテキスト情報を追加するために探している場合を除き)のみ、第二に交流を

をあなたがそれらに応じて、プログラムの動作を変更する立場にある例外をキャッチプログラムはRAIIを表示しません。したがって、スマートポインタまたはRAII対応のハンドルクラスでハンドルとメモリの割り当てをすべてラップしない限り、この状況で例外をスローするとリソースがリークする可能性があります。

例外処理の追加を検討する前に実行する必要があります。

プログラムが将来的に積極的に維持される可能性が高い場合は、これを行う際におそらくマイレージがあります。そうでなければ、おそらく眠っている犬を残しておく方がよいでしょう。

+0

良い点がいくつかありますが(+1)、私は言いました。 HTPPまたはTCPメッセージ、またはSMSまたは電子メールを送信する最後のぞっとしたチャンス。基本的に*** ***だけでなく、最後に気をつけてからdie – Mawg

+1

あなたのベスト・ベットは、おそらくシグナル・ハンドラー(UNIX系システムの場合)またはWindowsの構造化例外処理です。 –

+0

うわー!シグナルハンドラは良いです!どのように私はそれをお見逃しですか?その理由のためにシグナル処理を追加し終わったところで、Cの仕事に就きました。 (他の)回答として投稿しても構いません – Mawg

関連する問題