Rat*_*eek 110 c# debugging build debug-symbols visual-studio
在Visual Studio 2010 for C#项目中,如果转到项目属性>构建>高级>调试信息,则有三个选项:none,full或pdb-only.根据这个问题的答案,我相信我理解full和pdb之间的一些区别.但是,哪个更适合发布版本?如果我使用"完整"会有性能影响吗?如果我使用"pdb-only",那么调试生产问题会更难吗?
"full"和"pdbonly"有什么区别?https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option
Mat*_*ard 88
我会用pdb-only.您将无法将调试器附加到已发布的产品,但如果您获得崩溃转储,则可以使用Visual Studio或WinDBG在崩溃时检查堆栈跟踪和内存转储.
如果你使用full而不是pdb-only,那么你将获得相同的好处,除了可执行文件可以直接附加到调试器.鉴于您的产品和客户,您需要确定这是否合理.
确保将PDB文件保存在某处,以便在出现崩溃报告时可以引用它们.如果可以设置符号服务器来存储这些调试符号,那就更好了.
如果您选择建造none,那么在现场发生碰撞时您将无法追索.您将无法对事故进行任何形式的事后检查,这可能会严重妨碍您追踪问题的能力.
关于性能的说明:
无论约翰·罗宾斯和埃里克利珀写了博客文章有关/debug的标志,他们都表明,这个设置为零性能的影响.有一个单独的/optimize标志,指示编译器是否应执行优化.
rpa*_*abi 58
警告/debug开关的 MSDN 文档(在Visual Studio中它是调试信息)似乎已经过时了!这就是它的错误
如果使用/ debug:full,请注意对JIT优化代码的速度和大小有一些影响,并且/ debug:full对代码质量的影响很小.我们建议/ debug:pdbonly或不用PDB来生成发布代码.
/ debug:pdbonly和/ debug:full之间的一个区别是/ debug:full编译器发出一个
DebuggableAttribute,用于告诉JIT编译器调试信息是否可用.
那么,现在是什么呢?
如果它们完全相同,为什么我们有这些选择?John Robbins(Windows调试之神)发现这些是出于历史原因.
回到.NET 1.0,存在差异,但在.NET 2.0中却没有.看起来.NET 4.0将遵循相同的模式.在与CLR调试团队进行双重检查后,完全没有区别.
控制JITter是否进行调试构建的是/ optimize开关.<...>
最重要的是,您希望使用/ optimize +和任何/ debug开关构建发布版本,以便可以使用源代码进行调试.
然后他继续证明这一点.
现在优化是一个单独的开关的一部分/optimize(在Visual Studio中称为Optimize code).
简而言之,无论DebugInfo设置pdb-only还是full,我们都会得到相同的结果.建议避免使用None,因为它会剥夺您能够分析已发布产品或附加调试器的故障转储.
blo*_*art 16
您只需要PDB,但您不希望将PDB文件提供给用户.尽管如此,除了二进制文件之外,还可以将故障转储加载到WinDbg等调试器中,并查看程序实际失败的位置.当您的代码在您无权访问的计算机上崩溃时,这可能非常有用.
完整调试会将[Debuggable]属性添加到您的代码中.这对速度有很大影响.例如,可以禁用某些循环优化以使单步执行更容易.此外,它对JIT过程的影响很小,因为它打开了跟踪.
我正在编写一个未处理的异常处理程序,当使用 pdb-only 时,堆栈跟踪包括行号,否则当我选择 None 时,我只会得到 Sub/Function 的名称。
如果我不分发 .pdb,即使使用 pdb-only 构建,我也不会在堆栈跟踪中获得行号。
因此,我正在分发(XCOPY 在 LAN 上部署)pdb 以及来自我的 VB 应用程序的 exe。
| 归档时间: |
|
| 查看次数: |
37612 次 |
| 最近记录: |