1
我试图在下面的示例中获取大多数异常堆栈跟踪的内部方法名称。由于不明原因,我总是得到MoveNext
方法名称,而不是真名。我该如何解决它?在TPL数据流块中抛出的异常方法名始终是MoveNext()
var st = new StackTrace(ex, true);
var frame = st.GetFrames()?.First(y => y.GetFileName() != null);
var method = frame.GetMethod().ToString(); // result: Void MoveNext()
var method2 = frame.Name; // result: MoveNext
UPDATE:
这时候,异常的TPL Dataflow
块的委托抛出发生:
private async Task Parse(ListItem item)
{
await Task.Delay(1);
throw new Exception("Error");
}
// ...
var parseBlock = new ActionBlock<ListItem>(
async x => { await Parse(x).ConfigureAwait(false); });
我得到MoveNext
从与任何代表任何块。 Stacktrace:
at RP.Core.ListsPipeline.<Parse>d__21.MoveNext() in Class.cs:line 179
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Class.<<Start>b__18_0>d.MoveNext() in Class.cs:line 81
我想要得到Parse
方法名称(StackTrace的第一个字符串)。
向我们展示触发异常的代码。 –
发布的代码是“如何获得例外信息”,是不必要的。 –
同时发布确切的异常细节(从调试器窗口)。 –