2015-08-08 19 views
5

Lỗi xảy ra khi khách hàng tôi đang sử dụng lệnh gọi tới Web Api. Vấn đề là dấu vết ngăn xếp tôi nhận được trở lại là một chút không đọc được, không có số dòng vì vậy tôi không chắc chắn nơi để tìm. Đây là nó được trả về như một phản ứng Json.Dấu vết ngăn xếp đúng từ Asp.Net Web Api Không đồng bộ/Cuộc gọi công việc

"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()" 
} 

Có cách nào tôi có thể định cấu hình api web để trả lại số dòng nơi xảy ra lỗi để tôi có thể gỡ lỗi vấn đề một cách thích hợp hơn không?

Vấn đề này đã được đề cập ở đây: Stack traces with async/await

tôi đang usng Net 4.5 nhưng lỗi vẫn được outputted theo cách này.

+0

bạn có thể gỡ lỗi api không? bạn có thể dễ dàng tìm kiếm một 'NullReferenceException' nếu bạn có thể. –

+2

@JoelDean: 'WakeSocial.Gateway.WebApi.Host.Controllers.NotificationsController. d__7.MoveNext() 'có nghĩa là nó trong hành động' NotificationsController.Response'. Hành động có thực sự dài và phức tạp đến nỗi bạn cần một số dòng để theo dõi nó? –

Trả lời

0

Tôi sử dụng một phần mở rộng lưu trữ stack trace thông tin nội bộ trường hợp ngoại lệ, ví dụ, mã gốc:

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

với đọc stack trace:

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

và đầu ra sẽ chứa stack trace với dòng số. Xem thêm https://github.com/ilio/AsyncStackTrace/blob/master/UnitTests/AsyncStackTraceExtensionUnitTest.cs

Các vấn đề liên quan