m.e*_*son 251 .net debugging debug-symbols visual-studio pdb-files
为什么Visual Studio 2005 .pdb
在发布时编译时会生成文件?我不会调试发布版本,为什么它们会生成?
Cod*_*ray 404
因为没有PDB文件,除了地址级调试之外的其他任何东西都不可能调试"Release"构建.优化确实在你的代码上做了一个数字,如果出现问题就很难找到罪魁祸首(例如,抛出异常).即使设置断点也非常困难,因为源代码行不能与生成的汇编代码一对一匹配(或者甚至以相同的顺序).PDB文件可以帮助您和调试器,使得事后调试变得更加容易.
您要指出,如果您的软件已准备好发布,那么您应该在那时完成所有调试.虽然这确实如此,但要记住以下几点:
您还应该使用"发布"版本测试和调试应用程序(在发布之前).这是因为开启优化(默认情况下,它们在"调试"配置下被禁用)有时会导致出现您无法捕获的细微错误.当您进行此调试时,您将需要PDB符号.
客户经常报告仅在"理想"条件下出现的边缘情况和错误.这些是在实验室中几乎不可能再现的东西,因为它们依赖于该用户机器的一些破坏性配置.如果他们是特别有用的客户,他们将报告抛出的异常并为您提供堆栈跟踪.或者他们甚至会让你借用他们的机器来远程调试你的软件.在任何一种情况下,您都希望PDB文件能够为您提供帮助.
应始终在启用了优化的"发布"版本上进行性能分析.再一次,PDB文件派上用场,因为它们允许将被分析的汇编指令映射回您实际编写的源代码.
编译后,您无法返回并生成PDB文件.*如果你在构建过程中没有创建它们,那么你就失去了机会.创造它们并没有伤害任何东西.如果您不想分发它们,可以从二进制文件中省略它们.但如果你以后决定要他们,那你就不走运了.最好始终生成它们并归档副本,以防万一你需要它们.
如果你真的想关掉它们,那总是一个选择.在项目的"属性"窗口中,对于要更改的任何配置,将"调试信息"选项设置为"无".
不过请注意,即"调试"和"释放"的配置做发射调试信息在默认情况下使用不同的设置.您需要保留此设置.对于Debug构建,"Debug Info"选项设置为"full",这意味着除了PDB文件之外,调试符号信息也嵌入到程序集中.您还可以获得支持编辑和继续等酷炫功能的符号.在发布模式下,选择"仅pdb"选项,它听起来只包含PDB文件,而不会影响程序集的内容.因此,它不像您/bin
目录中是否存在PDB文件那么简单.但假设您使用"仅pdb"选项,PDB文件的存在绝不会影响代码的运行时性能.
*正如Marc Sherman在评论中指出的那样,只要您的源代码没有改变(或者您可以从版本控制系统中检索原始代码),您就可以重建它并生成匹配的PDB文件.至少,通常.这在大多数情况下运行良好,但是每次编译相同的代码时都不保证编译器生成相同的二进制文件,因此可能存在细微差别.更糟糕的是,如果您在此期间对工具链进行了任何升级(例如应用Visual Studio的Service Pack),则PDB更不可能匹配.为了保证事后生成的PDB文件的可靠生成,您不仅需要存档版本控制系统中的源代码,还需要存档整个构建工具链的二进制文件,以确保您可以精确地重新构建构建环境的配置. .毫无疑问,简单地创建和存档PDB文件要容易得多.
Ali*_*tad 83
PDB可以被生成Release
,以及用于Debug
.设置为(在VS2010中但在VS2005中必须类似):
None
→交通Release
→交通Debug
→交通None
→交通Release
只需将其更改为Debug
.
小智 8
没有.pdb文件,逐步完成生产代码几乎是不可能的; 你必须依赖其他昂贵且耗时的工具.我知道你可以使用跟踪或windbg,但这实际上取决于你想要实现的目标.在某些情况下,您只需要使用生产数据单步执行远程代码(没有错误或异常)来观察特定行为,这就是.pdb文件派上用场的地方.没有它们就不能在该代码上运行调试器.
为什么你这么肯定你不会调试发布版本?有时(希望很少但很少发生)您可能会收到客户的缺陷报告,由于某种原因(不同的时间,小的不同行为或其他)在调试版本中无法重现.如果该问题在发布版本中似乎是可重现的,那么您将很乐意拥有匹配的pdb.
归档时间: |
|
查看次数: |
101668 次 |
最近记录: |