本节书摘来自华章出版社《深入分析gcc 》一书中的第2章,第2.5节,作者 王亚刚 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
gcc本身对包含了众多的调试选项,既可以为用户程序生成调试信息,也可以将gcc运行过程中的关键信息保存在文件或输出在终端上,常用的调试选项如表2-2所示。如果需要了解gcc在处理的各个阶段里中间表示的具体内容,或者需要了解gcc中某个处理过程对于中间表示的处理细节时,就可以使用表2-2中给出的各种gcc调试选项,输出gcc运行过程中所生成的中间表示的调试信息和处理过程细节,并结合gcc的代码,从而了解gcc的具体工作细节。

假设有如下的源代码:
为了了解gcc对该文件编译过程中的主要处理过程,可以使用如下命令输出gcc处理过程的主要调试信息和工作流程。
可以看出,此时输出的各种调试文件名称格式为:test.c.nnn[r/t].name,其中nnn为一个编号,t表示该处理过程是基于tree的gimple处理过程,r表示该处理过程是基于rtl的处理过程。如果读者关注函数控制流图(cfg,control f?low graph)的信息,那么可以打开test.c.013t.cfg文件,查看其中的具体内容。内容如下:
其中就包含了例子中给出函数的控制流图,如果想了解更详细的cfg信息,也可以使用如下的编译形式:
可以看出,gcc编译时会生成更加详细的cfg信息。
读者也可以根据自己的需要,合理地使用表2-2中的调试选项,输出gcc编译过程中感兴趣的调试信息,从而分析gcc的工作细节。