title: Try/Catch in every method of every class?
body: <p>When we wrap a bunch of statements in a try/catch and one of these issues an exception, within the catch we have no way of knowing which of the statements caused the exception (the ex.stacktrace shows our current method (doit), its caller, its caller's caller, etc. but neither do1 or do2):</p>
  
  <pre><code>function doit() {
     try {
       do1();
       do2();
       [...]
     }
     catch (Exception ex) {
       // what failed?
     }
  }
  </code></pre>
  
  <p>generally I've taken to wrapping all statements and rethrowing, sort of like:</p>
  
  <pre><code>private void do1() {
    try {
       // do whatever
    } catch(Exception e) {
       // write to my error log
       throw new Exception("do1: " + e.Message, e.InnerException);
    }
  }
  </code></pre>
  
  <p>which leaves a trail of breadcrumbs in my log and makes the chain available for the upstream.  The problem, of course, is that I have to wrap <em>every</em> method I write with this kind of code.</p>
  
  <p>something tells me I'm being dumb about it.  what is the right approach?</p>