Unmangling(.NET 4.5之前版本)异步/等待堆栈跟踪

Ric*_*lay 10 debugging exception-handling stack-trace visual-studio async-await

由于.NET 4.5之前的运行时(包括SL/WP)不是异步感知的,因此它们生成的堆栈跟踪显示编译器生成的类/方法名称(如d_15).

有没有人知道在给定运行时堆栈跟踪,程序集和pdb的情况下生成更好的堆栈跟踪的实用程序?

要明确:我不是在寻找一个完整的异步堆栈,只是更好地了解实际抛出异常的方法

看来上面的陈述不够清楚,所以这里有一个例子:

public async void Foo()
{
    await Bar();
}

public async Task Bar()
{
    async SomethingToMakeThisMethodAsync();

    throw new Exception()
}
Run Code Online (Sandbox Code Playgroud)

抛出异常时Bar,stacktrace将只包含生成的方法名称(d_15()).我不在乎Foo叫Bar.我只是想知道Bar是抛出异常的方法

Pet*_*hie 4

Andrew Stasyuk 在 MSDN 杂志http://msdn.microsoft.com/en-us/magazine/jj891052.aspx上发表了一篇很棒的文章,详细介绍了异步因果链作为一种根据不相交且令人困惑的堆栈跟踪来帮助调试的方法。