为什么 C# 发布版本包含调试信息
Why does the C# release build contain debug info
在反汇编我的 C# 程序(发布版本)时,我注意到它包含函数的名称和我在项目中使用的变量(我认为这是调试信息,如果我错了请纠正我) .
有人可以解释为什么它在那里以及程序是否需要它。
在托管代码中,您所谓的 "debug info" 分为三个级别。
包含的元数据:这包括所有公开的命名空间、名称和类型(不包括局部变量名等内容)。它被捆绑在程序集中,并允许该代码的使用者知道如何引用代码并引用它。在 C/C++ 土地上,这一级别的元数据在 H 文件 中传播。在 COM 领域,您会得到 类型库 。所有程序集都会得到这个 - 没有它就无法使用它们。
符号文件(又名PDB文件)。这是关于内部名称、行号等的扩展信息。调试器使用这些信息来使调试工作更好。您可以为 "debug build" 或 "release build"(或其他类型的构建)创建 PDB 文件。这是由 Advanced Build Settings 对话框中的设置控制的,该对话框可从项目属性的 Build 选项卡访问。默认情况下,发布版本设置为 PDB Only,而调试版本设置为 Full(我相信这可能会将更多信息直接放在程序集中) . PDB 文件在托管代码中的重要性不如在 C/C++ 领域中的重要。在那里,如果没有匹配的 PDB 文件,调试几乎是不可能的。
定义 DEBUG 常量:(在 Build 上设置项目属性的选项卡)。此#defined 常量用作包含(或不包含)仅调试代码的开关。无论是否定义此常量,代码的工作方式可能会略有不同。
在反汇编我的 C# 程序(发布版本)时,我注意到它包含函数的名称和我在项目中使用的变量(我认为这是调试信息,如果我错了请纠正我) .
有人可以解释为什么它在那里以及程序是否需要它。
在托管代码中,您所谓的 "debug info" 分为三个级别。
包含的元数据:这包括所有公开的命名空间、名称和类型(不包括局部变量名等内容)。它被捆绑在程序集中,并允许该代码的使用者知道如何引用代码并引用它。在 C/C++ 土地上,这一级别的元数据在 H 文件 中传播。在 COM 领域,您会得到 类型库 。所有程序集都会得到这个 - 没有它就无法使用它们。
符号文件(又名PDB文件)。这是关于内部名称、行号等的扩展信息。调试器使用这些信息来使调试工作更好。您可以为 "debug build" 或 "release build"(或其他类型的构建)创建 PDB 文件。这是由 Advanced Build Settings 对话框中的设置控制的,该对话框可从项目属性的 Build 选项卡访问。默认情况下,发布版本设置为 PDB Only,而调试版本设置为 Full(我相信这可能会将更多信息直接放在程序集中) . PDB 文件在托管代码中的重要性不如在 C/C++ 领域中的重要。在那里,如果没有匹配的 PDB 文件,调试几乎是不可能的。
定义 DEBUG 常量:(在 Build 上设置项目属性的选项卡)。此#defined 常量用作包含(或不包含)仅调试代码的开关。无论是否定义此常量,代码的工作方式可能会略有不同。