一連のステートメントをtry/catchでラップし、これらの問題の1つが例外を発行する場合、catch内では、どのステートメントが例外を引き起こしたかを知る方法がありません(ex.stacktraceは現在のメソッド(doit)を示しています。発信者、その発信者の発信者など。ただし、do1とdo2のどちらでもない):
function doit() {
try {
do1();
do2();
[...]
}
catch (Exception ex) {
// what failed?
}
}
一般的に、私はすべてのステートメントをラップして再スローすることにしました。
private void do1() {
try {
// do whatever
} catch(Exception e) {
// write to my error log
throw new Exception("do1: " + e.Message, e.InnerException);
}
}
これにより、ログにパンくずリストが残り、チェーンをアップストリームで使用できるようになります。もちろん、問題は、私が書くすべてのメソッドをこの種のコードでラップしなければならないことです。
何かが私にそれについて愚かであると教えてくれます。正しいアプローチは何ですか?