static void Main(string[] args) { try { var c2 = new C2(); c2.ThrowOriginalException(); } catch (Exception ex) { Console.WriteLine($"Original StackTrace {ex.StackTrace}\n"); if (ex.InnerException != null) { Console.WriteLine($"InnerException StackTrace {ex.InnerException.StackTrace}"); } } Console.WriteLine(); Console.WriteLine(); try { var c2 = new C2(); c2.MessWithStackTrace(); } catch (Exception ex) { Console.WriteLine($"Original StackTrace {ex.StackTrace}\n"); if (ex.InnerException != null) { Console.WriteLine($"InnerException StackTrace {ex.InnerException.StackTrace}"); } } Console.WriteLine(); Console.WriteLine(); try { var c2 = new C2(); c2.RightWayToAddInfoToNewException(); } catch (Exception ex) { Console.WriteLine($"Original StackTrace {ex.StackTrace}\n"); if (ex.InnerException != null) { Console.WriteLine($"InnerException StackTrace {ex.InnerException.StackTrace}"); } } Console.WriteLine(); Console.WriteLine(); try { var c2 = new C2(); c2.WrongWayToAddInfoToNewException(); } catch (Exception ex) { Console.WriteLine($"Original StackTrace {ex.StackTrace}\n"); if (ex.InnerException != null) { Console.WriteLine($"InnerException StackTrace {ex.InnerException.StackTrace}"); } } }