您的位置:首页 > 编程语言 > C语言/C++

Clang解析C++程序(2)

2016-09-27 00:18 218 查看
        上一次说到将编译器实例的langoption中的CPlusPlus变量设置为1,就可以解析C++的程序了,也只是能解析简单的一段C++代码。后来在解析一个工作中用的头文件的时候,报了一大堆错,像不认识size_t啦,不认识__int64啦之类的。我简单地又构造了一些代码放在原来的简单代码段中,一运行,发现也认识。仔细区别了一下,发现两边代码有一个不同之处就是一边有包含的头文件,一边没有。我又重新在简单代码段上面加了一句#include<stdio.h>,一运行,也同样报了很多的错。这很可能是预编译头文件的事。

        随后我直接运行Clang可执行文件,编译那个带头文件的简单代码,没发现报错,于是有了新的研究手段,看Clang的源代码,看看它是怎么运行的。

        不出所料,代码是如此复杂以至于看不懂。那只能一步步跟吧,把断点断在勉强能看懂一点的地方,运行!附加!结果跑着跑着,程序就跑完了,也没报错,断点也没断下来。

        仔细研究了很久,才发现Clang运行起来以后,起一个进程,它自动生成了许多参数然后又起了一个进程,后面这个进程才是真正解析程序的进程,而我把Clang源码附加上第一个进程,所以断点才断不下来,莫名其妙就运行完了。有了这个发现,后面就容易多了,附加第二个进程,果然断点断下来了,这样就可以和我手动创建的编译器实例对比,看看哪儿和人家的不一样。一对比,发现了一些端倪。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: