编译期间启用调试选项时生成的可执行文件中的其他内容
Additional content in the generated executable file when debug option is enabled during compilation
我有一些小的源代码,我尝试用两种不同的方式编译它:
1.With 没有调试选项
2.With 启用调试选项
我注意到,当我在编译过程中添加调试启用编译器选项时,生成的可执行文件比未添加调试启用选项时生成的可执行文件大。
由于调试启用而添加到原始可执行内容的附加内容是什么?
当您使用调试选项编译可执行文件时,它会向可执行文件添加调试信息。在调试程序时,调试器使用此信息来显示变量名、函数名和行号等内容。与调试应用程序和查看汇编代码相比,这使得事情更容易跟踪。
编译器在调试模式下禁用代码优化(最简单的优化除外),以便于将源代码映射到机器代码。这也意味着在调试期间会看到任何未使用的代码,如果它确实是要使用的,那么您可以调查为什么它没有被调用。
调试选项可以做的另一件事是添加许多检查以确保您的程序正常运行。像这样的东西:
- 空指针检查
- 除以零检查
- 数组访问检查
- 内存访问检查
- 整数溢出检查
- 检查是否正确使用了标准库函数
- 将每个未初始化的变量归零
如果检查失败,程序会通过消息框或其他输出方法提醒您,或者以可预测的方式失败。
我有一些小的源代码,我尝试用两种不同的方式编译它: 1.With 没有调试选项 2.With 启用调试选项
我注意到,当我在编译过程中添加调试启用编译器选项时,生成的可执行文件比未添加调试启用选项时生成的可执行文件大。 由于调试启用而添加到原始可执行内容的附加内容是什么?
当您使用调试选项编译可执行文件时,它会向可执行文件添加调试信息。在调试程序时,调试器使用此信息来显示变量名、函数名和行号等内容。与调试应用程序和查看汇编代码相比,这使得事情更容易跟踪。
编译器在调试模式下禁用代码优化(最简单的优化除外),以便于将源代码映射到机器代码。这也意味着在调试期间会看到任何未使用的代码,如果它确实是要使用的,那么您可以调查为什么它没有被调用。
调试选项可以做的另一件事是添加许多检查以确保您的程序正常运行。像这样的东西:
- 空指针检查
- 除以零检查
- 数组访问检查
- 内存访问检查
- 整数溢出检查
- 检查是否正确使用了标准库函数
- 将每个未初始化的变量归零
如果检查失败,程序会通过消息框或其他输出方法提醒您,或者以可预测的方式失败。