Debugging 编译期间启用调试选项时生成的可执行文件中的其他内容

Debugging 编译期间启用调试选项时生成的可执行文件中的其他内容,debugging,compilation,executable,Debugging,Compilation,Executable,我有一些小的源代码,我试着用两种不同的方式编译它们: 1.没有调试选项 2.启用调试选项时 我注意到,当我在编译期间添加调试启用编译器选项时,生成的可执行文件比未添加调试启用选项时生成的可执行文件大。 由于启用调试而添加到原始可执行文件内容中的其他内容是什么?使用调试选项编译可执行文件时,它会将调试信息添加到可执行文件中。调试程序时,调试器使用此信息显示变量名、函数名和行号等内容。与调试应用程序和查看汇编代码相比,这使跟踪变得更加容易 编译器在调试模式下禁用优化代码(最简单的优化除外),以便于将

我有一些小的源代码,我试着用两种不同的方式编译它们: 1.没有调试选项 2.启用调试选项时

我注意到,当我在编译期间添加调试启用编译器选项时,生成的可执行文件比未添加调试启用选项时生成的可执行文件大。
由于启用调试而添加到原始可执行文件内容中的其他内容是什么?

使用调试选项编译可执行文件时,它会将调试信息添加到可执行文件中。调试程序时,调试器使用此信息显示变量名、函数名和行号等内容。与调试应用程序和查看汇编代码相比,这使跟踪变得更加容易

编译器在调试模式下禁用优化代码(最简单的优化除外),以便于将源代码映射到机器代码。这也意味着在调试期间会看到任何未使用的代码,如果它实际上是要被使用的,那么您可以调查为什么不调用它

调试选项可以做的另一件事是添加许多检查,以确保程序正常运行。例如:

  • 空指针检查
  • 除零检查
  • 阵列访问检查
  • 内存访问检查
  • 整数溢出检查
  • 检查是否正确使用了标准库函数
  • 将每个未初始化的变量归零

如果你检查失败,程序会通过消息框或其他输出方法提醒你,或者以可预测的方式失败。

这是如何与C和C++两种不同语言相关的?这很有帮助。但是我在阅读你的文章时遇到了另一个问题,编译器在调试模式下禁用优化代码(除了最简单的优化),这是否意味着我将无法使用我需要的实际优化进行调试。?例如,我对尺寸进行优化。但由于启用了调试选项,编译器将禁用优化。因此,我不会调试预期的输出可执行文件。正确吗?@M.Ravi调试时,不应优先考虑优化;调试应该被理解。再次感谢。