在VB/C#中,“生成调试信息”是什么意思?

21

"Generate Debug Info" 在 VB/C# 中是什么意思?

"none" 和 "pdb-only" 的区别相当明显。但是“pdb-only”和“full”呢?

2个回答

22

编译器在构建时会为您生成一个pdb文件,其中包含应用程序的符号,并可供Visual Studio调试器和外部调试器轻松查找问题所在。

"Full" 表示在构建应用程序时会生成完整的调试信息,因此代码本身可以进行调试,包括 [DebuggableAttribute],该属性将代码与调试信息(例如符号)关联起来。

"pdb-only" 表示仅在构建时生成pdb调试信息,不会将 [DebuggableAttribute] 添加到已编译的代码中,这是JIT编译器用于将代码链接到调试信息的操作。

更多信息请参见此处


3
链接失效了。 - Daniel Rose
@Nathan 我注意到在 debug:full 或 pdb-only 开关下,DebuggableAttribute 被添加到元数据中。它表示以下位 DebuggingModes 标志的并集:IgnoreSymbolStoreSequencePoints、EnableEditAndContinue、DisableOptimizations。
VS 2010 中 4 种组合的 DebuggableAttribute 标志值如下:
full & optimize-(01 00 07 01 00 00 00 00)
full & optimize+(01 00 03 00 00 00 00 00)
pdb-only & optimize+(01 00 02 00 00 00 00 00)
pdb-only & optimize-(01 00 02 01 00 00 00 00)
- RBT

1

我应该使用“full”或“pdb-only”编译发布版本的调试信息吗?

还可以参见https://learn.microsoft.com/en-us/cpp/build/reference/debug-generate-debug-info

我会选择使用pdb-only。您将无法将调试器附加到已发布的产品上,但如果遇到崩溃转储,则可以使用Visual Studio或WinDBG在崩溃时检查堆栈跟踪和内存转储。

如果您选择了full而不是pdb-only,则将获得相同的好处,除了可直接将可执行文件附加到调试器上。您需要确定这是否适用于您的产品和客户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接