使用嵌套异步方法调试异步MVC操作控制器

时间:2013-10-21 17:28:52

标签: asp.net-mvc-4 asynchronous async-await

我在MVC4应用程序中调用ASYNC方法。此方法必须调用十几个嵌套的其他方法。我的问题是,如果这些嵌套方法中的任何一个中断,它会将错误传递给父方法。由于它们都是嵌套的,它只是不断传递链返回到HTTP上下文的一般错误消息。

由于我有这么多嵌套方法,我不知道如何找到有关错误的更多信息。即使是简单的线路也会非常有帮助。

现在我正在试图打破每一行,看看在停止响应之前最后一行。单独使用它的嵌套方法,这个方法超过2000行代码。正如您所知,这是一种非常无效的调试方式。

在嵌套方法中,找到ASYNC方法实际破坏位置的更好方法的任何帮助都会非常有用。我真的想避免对我拥有的每一种方法进行Try / Catch。

- 编辑 -

已经回答了这个问题。我将我的解决方案放在下面,并根据StackOverflow限制在两天内将其标记为已回答。

2 个答案:

答案 0 :(得分:0)

显然,如果我在Action Method中的第一个调用中放置一个Try / Catch,它至少会给我堆栈跟踪中的行。一旦注意到这一点,我添加了ELMAH并在抛出一般异常时检查了我的错误日志。看来这条线也会传回ELMAH。

虽然这不像Visual Studio中的正常异常破坏那么好,但它允许我轻松地在该确切的行上设置断点以查看正在发生的事情。

答案 1 :(得分:0)

不幸的是,异步“堆栈跟踪”不能很好地开箱即用。

您可以自己进行追踪using a technique I describe in this blog post。或者您可以尝试安装我的async diagnostics package,它将异步“堆栈跟踪”添加到异常的Data属性中(注意:ELMAH中默认不记录)。但是,此软件包尚未准备好生产,因此我建议在部署之前卸载。