为什么GDB(或任何调试器)进入标头?

时间:2019-03-07 11:23:09

标签: c++ debugging header gdb

我几乎不花两周的时间自学C ++,所以尽管这是一个非常基本的问题,请客气。现在,据我所知,标头在程序运行时完全不起作用。标头仅在编译期间由编译器使用。仍然在调试程序(我正在使用GDB)时,调试器会进入标头。当在调试时也使用反汇编时,我注意到那些标头步骤实际上代表汇编指令(例如“ mov”等)。但是标头甚至不应该存在于二进制文件中。那么这里到底发生了什么?

2 个答案:

答案 0 :(得分:2)

“源文件”在编译期间也仅由编译器使用,尽管如果您对编译器的要求很好,它将在已编译的二进制文件中放置调试符号,该二进制文件将包含程序源文件

“标题”没有什么神奇之处。它们仅按惯例使用,并由一个或多个“源文件”的 preprocessor 指令#include使用。而且重要的是这个“或更多”-通常安排一个程序,以便“头”可以被多个源文件包含。

您的调试器可帮助您查明原始代码的位置。

答案 1 :(得分:1)

  

现在,据我所知,标头在   程序的运行时。标头仅在编译期间使用   编译。

这是一个误解,因为标头不是一种特殊的文件。标头(通常是.h或.hpp)与其他源文件在技术上没有什么不同-只是一个惯例,应该包含标头文件,并且许多标头包含源代码(只要看看任何STL文件-认为作为头文件)