使用log4net声明为:
private readonly ILog log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType());
Run Code Online (Sandbox Code Playgroud)
在异步方法或任务中,如下所示:
public async void CheckSomething()
{
log.Info(null);
//....
}
Run Code Online (Sandbox Code Playgroud)
日志MoveNext而不是CheckSomething.知道如何让它记录一个实际的方法名称?
由于.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是抛出异常的方法
debugging exception-handling stack-trace visual-studio async-await
当我正在使用Web Api调用的客户端时发生错误.问题是我回来的堆栈跟踪有点不可读,没有行号,所以我不知道在哪里看.这是作为Json响应返回的.
"message": "An error has occurred.",
"exceptionMessage": "Object reference not set to an instance of an object.",
"exceptionType": "System.NullReferenceException",
"stackTrace": " at WakeSocial.Gateway.WebApi.Host.Controllers.NotificationsController.<Response>d__7.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__3`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at …Run Code Online (Sandbox Code Playgroud) async-await ×3
c# ×2
asp.net ×1
debugging ×1
exception ×1
log4net ×1
methodbase ×1
stack-trace ×1