Clang解析C++程序(2)

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

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

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

        仔细研究了很久,才发现Clang运行起来以后,起一个进程,它自动生成了许多参数然后又起了一个进程,后面这个进程才是真正解析程序的进程,而我把Clang源码附加上第一个进程,所以断点才断不下来,莫名其妙就运行完了。有了这个发现,后面就容易多了,附加第二个进程,果然断点断下来了,这样就可以和我手动创建的编译器实例对比,看看哪儿和人家的不一样。一对比,发现了一些端倪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值