2013-10-21 76 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中未记录)。但是,此软件包尚未生产,因此我建议在部署之前先卸载。