title: Why does stack get truncated in Exception.StackTrace?
body: <p>Why does the high part of the stack (in Exception.StackTrace) gets truncated?
  Let's see a simple example:  </p>
  
  <pre><code>public void ExternalMethod()
  {
    InternalMethod();
  }
  
  public void InternalMethod()
  {
    try
    {
      throw new Exception();
    }
    catch(Exception ex)
    {
      // ex.StackTrace here doesn't contain ExternalMethod()!
    }
  }
  </code></pre>
  
  <p>It seems like this is "by design". But what are the reasons for such a strange design? It only makes debugging more complex, because in log messages I can't understand who called InternalMethod() and often this information is very necessary.</p>
  
  <p>As for solutions (for those who don't know), there are 2 general solutions as I understand:<br>
  1) We can log static Environment.StackTrace property, which contains the whole stack (for example, starting at the hiest level (message queue) and ending at the deepest method in which exception occurs).<br>
  2) We have to catch and log exceptions on highest levels. When we need to catch exceptions on lower levels to do something, we need to rethrow (with "throw" statement in C#) it further up.</p>
  
  <p>But the question is about reasons of such design.</p>