benaadams / Ben.Demystifier

High performance understanding for stack traces (Make error logs more productive)
Apache License 2.0
2.76k stars 118 forks source link

ToStringDemystified() doesn't use the standard ToString() pattern for inner exceptions #85

Open j2jensen opened 5 years ago

j2jensen commented 5 years ago

Consider the following LINQPad code:

void Main()
{
    try { Foo(); }
    catch (Exception e)
    {
        e.ToString().Dump("ToString");
        e.ToStringDemystified().Dump("ToStringDemystified");
        e.Demystify().ToString().Dump(".Demystify().ToString()");
    }
}

public void Foo()
{
    try { Bar();} catch(Exception e) {throw new InvalidOperationException("Something failed while trying to Bar", e);}
}
public void Bar()
{
    try { Baz(); } catch (Exception e) { throw new InvalidOperationException("Something failed while trying to Baz", e); }
}
public void Baz()
{
    throw new InvalidOperationException("Something went wrong in here");
}

Output for .Demystify().ToString() looks like this:

System.InvalidOperationException: Something failed while trying to Bar ---> System.InvalidOperationException: Something failed while trying to Baz ---> System.InvalidOperationException: Something went wrong in here
   at void UserQuery.Bar() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 47
   --- End of inner exception stack trace ---
   at void UserQuery.Bar() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 47
   at void UserQuery.Foo() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 43
   --- End of inner exception stack trace ---
   at void UserQuery.Foo() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 43
   at void UserQuery.Main() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 31

Output for .ToStringDemystified() looks like this:

System.InvalidOperationException: Something failed while trying to Bar
   at void UserQuery.Foo() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 43
   at void UserQuery.Main() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 31 ---> System.InvalidOperationException: Something failed while trying to Baz
   at void UserQuery.Bar() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 47
   at void UserQuery.Foo() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 43 ---> System.InvalidOperationException: Something went wrong in here
   at void UserQuery.Bar() in C:/Users/james.jensen/AppData/Local/Temp/LINQPad5/_pwdvguda/query_wparci.cs:line 47
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---

I believe this changed in a recent patch version update. (Tested on 0.1.4)