当我记录错误时,我通常会包含堆栈跟踪。这很好,但通常很难分辨错误的实际位置。
是否可以设置一个例程,在发生错误时,可能通过反射收集参数,局部变量等等?
答案 0 :(得分:2)
如果您没有VS2010,可以使用PostSharp编织代码以在调用函数时收集参数。但它会减慢代码速度,所以它只对调试有用。
编辑:(从我刚刚发表的评论中宣传这一点)
如果你想在生产中使用它,你可以限制PostSharp编织的范围,所以它只能在某些类/命名空间/程序集(甚至函数)上运行,或者你可以限制你的建议你做什么被执行。我试过的一件事,但没有完全贯彻,就是让建议方法简单地将堆栈帧信息记录在环形缓冲区中。发生异常时,记录器可以从环形缓冲区中获取堆栈帧信息并生成合适的日志消息。否则,当环形缓冲区填满时,帧信息才会被覆盖。您甚至可以使用堆栈而不是环形缓冲区,并使堆栈增长和缩小,记录帧信息,随着调用堆栈的增长和缩小。警告:您将无法从PostSharp无法修改的框架代码或第三方代码中获取帧信息。
答案 1 :(得分:1)
如果您可以升级到VS2010,可以尝试使用IntelliTrace功能,这正是这一点。