在生成堆栈跟踪和完全调查堆栈跟踪的那一刻之间可以经过很多时间。在此期间,相关文件可能会发生很多事情,有时会掩盖原始错误。在此期间可能已修复错误(重叠错误)。
是否有可能在发生错误时让Stacktraces显示有问题的文件?
答案 0 :(得分:2)
不优雅,而且您通常不希望用户浏览通过代码抛出意外异常(对攻击者敞开大门)。
通常,开发商店中发生的事情是用户报告错误,堆栈跟踪以及发生的构建。作为测试人员,您可以从您的档案中获取该构建(您正在保存所有受支持的版本的存档,方便吗?),安装,运行并尝试重现错误,与用户一起工作以根据需要提供其他信息。我已经看到很少有错误无法正常复制,即使它需要针对用户生产数据库的备份运行程序来执行此操作。
作为开发人员,您可以从版本控制存储库下载该构建的源代码(您正在使用版本控制,RIGHT?),并检查堆栈跟踪中的行以尝试通过检查发现问题,和/或构建并运行它以重现错误。然后,您将返回到最新的源版本,构建并运行相同的步骤(UI自动化系统可以在这里提供帮助),如果您没有收到错误,则其他人已经找到并修复了它。如果仍然出现错误,您还会获得一个更新的堆栈跟踪,其中包含与当前版本匹配的行,允许您设置断点并逐步完成。
答案 1 :(得分:0)
KeithS说过,还有一些方法可以在Exception时使用Exception.Data属性捕获更多有用的状态信息。见http://blog.abodit.com/2010/03/using-exception-data-to-add-additional-information-to-an-exception/
答案 2 :(得分:0)
虽然KeithS的答案非常正确,但它比你想象的更简单,更优雅。如果您可以收集转储文件(而不仅仅是堆栈跟踪),则可以将符号服务器和源服务器与调试器结合使用,从源代码控制中自动提取正确版本的代码。
例如:如果在MSBuild中启用PDB输出和源服务器集成,并将生成的PDB上载到符号服务器,Visual Studio可以根据信息中的信息从TFS或SourceSafe存储库自动加载正确的源控件。转储。