2015-08-08 3 views
5

Ein Fehler tritt auf, wenn ein Client, den ich verwende, Web API aufruft. Das Problem ist, dass der Stack-Trace, den ich bekomme, ein bisschen unlesbar ist, es gibt keine Zeilennummern, also bin ich mir nicht sicher, wo ich suchen soll. Dies wird als JSON-Antwort zurückgegeben.Proper Stack Trace von Asp.Net Web API Async/Taskaufrufe

"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 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.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.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__2.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.AuthenticationFilterResult.<ExecuteAsync>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 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()" 
} 

Gibt es eine Möglichkeit, sie web api Config kann die Zeilennummer zurück, wo der Fehler aufgetreten ist, so kann ich mehr in geeigneter Weise das Problem debuggen?

Das Thema wurde hier behandelt: Stack traces with async/await

ich derzeit usng .Net 4.5 noch die Fehler immer noch auf diese Weise ausgegeben bekommen.

+0

Können Sie die API debuggen? Sie könnten leicht nach einer "NullReferenceException" suchen, wenn Sie könnten. –

+2

@JoelDean: 'WakeSocial.Gateway.WebApi.Host.Controllers.NotificationsController. d__7.MoveNext() 'bedeutet, dass es sich um die Aktion" NotificationsController.Response "handelt. Ist die Aktion wirklich lang und komplex genug, dass Sie eine Zeilennummer benötigen, um sie aufzuspüren? –

Antwort

0

Ich bin eine Erweiterung verwenden, die innerhalb Ausnahmen Stack Trace-Informationen speichern, beispielsweise Original-Code:

try{  
    await NestedAsyncOperation(); 
}catch(NullReferenceException e){ 
    Debug.WriteLine(e) 
} 

mit lesbarem Stack-Trace:

try{  
    await NestedAsyncOperation().Trace(); 
}catch(Exception e){ 
    e.Catch((NullReferenceException ex) => { 
    Debug.WriteLine(e); 
    }).RethrowUnhandled(); 
} 

und Ausgang enthalten Stack-Trace mit Leitung Zahlen. Weitere Informationen https://github.com/ilio/AsyncStackTrace/blob/master/UnitTests/AsyncStackTraceExtensionUnitTest.cs