【发布时间】:2010-08-19 20:14:44
【问题描述】:
当我记录错误时,我通常会包含堆栈跟踪。这很好,但通常很难判断错误到底在哪里。
是否可以设置一个例程,在错误发生时收集(可能通过反射)参数、局部变量等...?
【问题讨论】:
-
你能举一个“无法判断错误发生在哪里”的例子吗?我想知道您的问题是错误的异常处理(破坏调用堆栈跟踪),还是只是您需要帮助阅读堆栈跟踪。
-
不幸的是,堆栈跟踪没有显示本地/参数的值。 afaik 你不能通过运行时日志来做到这一点 - 只能通过闯入调试器(即 VS)。但是它应该准确地告诉您异常发生的位置(至少是外部异常)。
-
糟糕的异常处理也是我的想法。我经常看到像
try { ... } catch (Exception ex) { Log.Error(ex); throw ex; }甚至只是try { ... } catch (Exception ex) { throw ex; }这样的异常处理,当throw ex;被执行时,它们都会丢弃异常中的堆栈跟踪。如果需要重新抛出异常,通常最好使用throw;和try { ... } catch (Exception ex) { Log.Error(ex); throw; }一样,或者以原来的异常作为内部异常抛出一个新的异常。 -
我确实有合法的堆栈跟踪。我没有的是上下文。方法或局部变量的参数是什么。
标签: c# .net error-handling