跟踪包含文件(包含链)



有时我想跟踪包含文件直到定义了特定类型的行。例如,在busybox中添加命令后,我发现添加的源代码包含内核头文件,其中包含其他头文件。但与linux构建过程中,配置定义变量(CONFIG_…)用于选择正确的头文件(并在头文件中选择正确的行)不同,在busybox构建中,这些变量未设置,因此头文件被选择。

所以我想跟踪头文件,看看例如u32类型是如何被类型定义的,以及在构建过程中如何选择正确的头文件。如果我知道了这一点,我就可以在我的busybox构建过程中添加一些配置,以便为最终构建选择正确的linux头文件和行。

是否有有效的方法来找到包含文件的包含路径?我尝试在制作.o文件时向CPPFLAGS添加-M,以查看包含哪些文件,但没有相关信息输出。

编辑:我使用grep查找文件的类型定义,然后改变每个候选文件的类型名,以找到最终使用的头文件。然后使用grep查找包含该文件的文件。并更改了包含文件名以识别出真实包含文件(真实包含文件在包含时出错,因为更改了文件名)。我重复了一下,这样我就可以跟踪包含路径了。也许这是唯一的方法?

要查看typedef名称的实际类型,需要查看预处理器的输出:

https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

它在gcc上的选项是-E。该输出还将递归地包含头文件中的内容。

最新更新