我有一个VB.net应用程序。目前,应用程序的发布版本是在没有PDB文件的情况下生成的。这给了我错误日志缺少有用的细节,如行号。 我正在考虑将PDB文件包含在未来版本中,但我想知道它的优点和缺点是什么(性能明智,尺寸明智,代码安全性明智)
答案 0 :(得分:13)
我知道我会为此而受到打击但是......
我同意Dave Markle,但我想补充一点,发布PDB文件的一个优点是,正如你所说,非常适合调试。
那就是说,我不销售软件,我写的代码全部供公司内部使用。在这种情况下,我没有看到将调试代码与PDB文件一起投入生产的问题。我从来没有见过性能损失,而且说实话,如果遇到未处理的异常,我们的用户很少会给我们正确的信息。当然,我们会尝试正确处理异常,但正如您所知,错误将会发生。我们的策略是为所有项目添加一个全局异常处理程序,并将这些事件记录到数据库中。这些错误包含行号,因为我们确实包含了调试文件,因此,我们能够快速识别错误代码并对其做出反应,修复它并获得更多无错误的应用程序。对我(以及我们的用户)来说,这是一个巨大的好处,我不想没有。
所以如果你处于类似情况,我会说忘记官方立场(在这种情况下)并继续发布pdb文件,并提出一个重要的警告。
确保使用PDB文件部署的任何Web应用程序都要确保正确处理所有异常,并且不会在标准的Asp.NET错误页面中无意中暴露代码行。
答案 1 :(得分:11)
当你为你的应用程序部署调试符号时,某人很容易接受并对你的工作进行反向工程,而有些人认为这是不合适的。同样,您必须部署更多文件,并且可部署项目变得更大。 PDB文件本身不会导致应用程序变慢,因为运送PDB并不总是排除进行优化(您只需要小心 - 默认的“调试”项目设置往往不会优化您的输出生成PDB)。
答案 2 :(得分:2)
为您的发布版本创建pdbs,但不发布它们。使用匹配的构建和源代码将pdbs保存在安全的地方。如果您遇到实时崩溃或类似情况,可以使用pdbs使用Debugging Tools for Windows或Visual Studio进行事后调试。
答案 3 :(得分:0)
我发现为Release版本构建调试信息也很有用 - 它有助于捕获bug。它不会使程序运行得更慢。但是,如果您不希望其他人能够更轻松地对其进行逆向工程,则不应将PDB文件与您的应用程序一起发送。只给测试人员。