2015-08-08 16 views
5

एक त्रुटि तब होती है जब एक क्लाइंट मैं वेब एपीआई पर कॉल का उपयोग कर रहा हूं। समस्या यह है कि मैं वापस आ रहा हूं स्टैक ट्रेस थोड़ा अपठनीय है, कोई लाइन नंबर नहीं है इसलिए मुझे यकीन नहीं है कि कहां देखना है। यह एक जेसन प्रतिक्रिया के रूप में वापस किया जा रहा है।Asp.Net Web Api Async/कार्य कॉल से उचित स्टैक ट्रेस

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

वहाँ एक रास्ता मैं वेब एपीआई विन्यास कर सकते हैं लाइन नंबर जहां त्रुटि हुई थी तो मैं अधिक उचित रूप से इस मुद्दे को डीबग कर सकते हैं वापस जाने के लिए है?

यहां मुद्दा यह कवर किया गया था: Stack traces with async/await

मैं वर्तमान में नेट 4.5 usng कर रहा हूँ अभी तक त्रुटियों अभी भी इस तरह से outputted मिलता है।

+0

क्या आप एपीआई डीबग कर सकते हैं? यदि आप कर सकते हैं तो आप आसानी से 'NullReferenceException' की तलाश कर सकते हैं। –

+2

@ जोएलडीन: 'वेकसामाजिक। गेटवे.WebApi.Host.Controllers.NotificationsController। d__7.MoveNext() 'का अर्थ है कि यह' अधिसूचना नियंत्रक। प्रतिक्रिया 'कार्रवाई में है। क्या कार्रवाई वास्तव में लंबी और जटिल है कि आपको इसे ट्रैक करने के लिए एक लाइन नंबर की आवश्यकता है? –

उत्तर

0

मैं एक विस्तार है कि अपवाद के अंदर ढेर जानकारी का पता लगाने संग्रहीत करता है, उदाहरण के लिए का उपयोग कर रहा हूँ, मूल कोड:

try{  
    await NestedAsyncOperation(); 
}catch(NullReferenceException e){ 
    Debug.WriteLine(e) 
} 
पठनीय स्टैक ट्रेस साथ

:

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

और आउटपुट इच्छा लाइन के साथ स्टैक ट्रेस शामिल संख्या। और देखें https://github.com/ilio/AsyncStackTrace/blob/master/UnitTests/AsyncStackTraceExtensionUnitTest.cs

संबंधित मुद्दे