この質問は2つの異なる言語であり、2つの異なるエラー処理方法があるため、おそらく2つに分割する必要があります。しかし、私の意見では、C++とCの両方に対応しています。なぜなら、そのルーツはかなり一般的ですから。ひどく私は技術的に可能であり、システム全体の状態に接続された各種のエラーを処理する方法を、彼らはそれから起こるかどうかは行くすでに何かがあることを意味します(またはすでになくなっ) -処理システムコール標準ライブラリの例外的な失敗
そこで質問です間違っている?これにより、malloc()
がNULL
、new
、bad_alloc
、Windows \ Linux socket
が「システムに残っているソケットがない」と報告され、スレッドスタックがあふれているようなことが返されます。
さらに、私はそれらをまったく扱うべきですか?理想的な世界では、すべての可能なエラーを処理する必要があるので、エンドユーザーは「システム障害:十分なメモリを割り当てることができませんでした」と表示されます。の代わりに "未処理例外" bad_alloc "および"システム障害:の代わりに ""ソケットを作成できませんでした。 "0x00000000でアクセスが拒否されました"。 C++では、私たちはこのようなint main()
何かに置くことができます:
try {
Program().Run();
}
catch (std::exception e) {
std::cout << "System failure: " << e.what() << std::endl;
}
catch (...) {
std::cout << "Unknown system failure" << std::endl;
}
が、私のプログラムはで終了した場合、私にとって、それは本当に重要ではないんかが存在する場合を「kablamsメモリを読み取ることができません!」取得できなかったハンドルに関する巧妙な言葉のテキストの壁。
私は「naaah、imma feelinはこのラッパーを書くにはあまりにも怠惰だ」と言う人ではありません。この種のエラーが発生する可能性があることを理解していれば、私は通常何とかそれを処理しようとします。私はまた、私たちが厳密に記憶に制限されている埋め込みシステムのように、そのようなことが起こる可能性がある(ほとんどありませんが)日常的に話しているわけではありません。存在しないファイルを開こうとするような些細なことではありません。私はあなたの古典的なLinux \ Windows C \ C++プログラムについて、かなり安定した環境でテストされており、このような環境では99%の割合で起動されることを話しています。
私が言っていることは、これらの事柄のいくつかは例外的な状況ではなく、たいていは例外をはるかに超えているということです。そして時には、私は突然そのメモリを覚えていれば、がに割り当てられないかもしれないし、いくつかのシステム固有のものを読んでください。私はちょうど私の頭を傷つけてそこに座って残っています。 "
防衛プログラミングは、常に、マーフィーの法則とそのすべてを使用してください。それをシステムログまたはカスタムログに記録します。 – t0mm13b