2013-10-21 109 views
0

我正在調用MVC4應用程序中的ASYNC方法。這個方法必須調用十幾個嵌套的其他方法。我的問題是,如果這些嵌套方法中的任何一箇中斷,它將錯誤傳遞給父方法。由於它們都是嵌套的,它只是不斷傳遞鏈向HTTP上下文返回通用錯誤消息。使用嵌套異步方法調試異步MVC操作控制器

由於我有這麼多的嵌套方法,我不知道如何找到有關錯誤的更多信息。即使是一條簡單的線條也會非常有用。

現在我正在訴諸破壞每一行,以查看在停止響應之前運行的最後一行。單獨使用這種方法,嵌套方法,超過2000行代碼。正如你所看到的,這在調試中是一種非常無效的方式。

在嵌套方法中,找到ASYNC方法實際崩潰的更好方法的任何幫助將非常有幫助。我真的想避免在我擁有的每一種方法上做一次Try/Catch。

- 編輯 -

已經回答。我在下面放置了我的解決方案,並將其標記爲在兩天內按StackOverflow限制回答。

+0

爲什麼你不能在調試器下運行它?我想,它應該在未捕獲的異常時自動中斷。 – svick

+0

它在一個正常的方法。在一個ASYNC方法中(即使你使用的是backgroundWorker),它不會中斷。 –

回答

0

顯然,如果我在我的Action Method裏第一次調用Try/Catch,它至少會給我堆棧跟蹤中的行。一旦注意到這一點,我添加了ELMAH並在拋出一個通用異常時檢查了我的錯誤日誌。看來這條線也被傳回給了ELMAH。

雖然這不像在Visual Studio中正常的異常中斷那麼好,但它允許我輕鬆地在該確切線上放置斷點以查看正在發生的事情。

0

不幸的是,異步「堆棧跟蹤」在開箱時不能很好地工作。

你可以做你自己的追蹤using a technique I describe in this blog post。或者你可以嘗試安裝我的async diagnostics package,它將異步「堆棧跟蹤」添加到異常的Data屬性(注意:在默認情況下,在ELMAH中未記錄)。但是,此軟件包尚未生產,因此我建議在部署之前先卸載。