Clang解析C++程序(2)
2016-09-27 00:18
218 查看
上一次说到将编译器实例的langoption中的CPlusPlus变量设置为1,就可以解析C++的程序了,也只是能解析简单的一段C++代码。后来在解析一个工作中用的头文件的时候,报了一大堆错,像不认识size_t啦,不认识__int64啦之类的。我简单地又构造了一些代码放在原来的简单代码段中,一运行,发现也认识。仔细区别了一下,发现两边代码有一个不同之处就是一边有包含的头文件,一边没有。我又重新在简单代码段上面加了一句#include<stdio.h>,一运行,也同样报了很多的错。这很可能是预编译头文件的事。
随后我直接运行Clang可执行文件,编译那个带头文件的简单代码,没发现报错,于是有了新的研究手段,看Clang的源代码,看看它是怎么运行的。
不出所料,代码是如此复杂以至于看不懂。那只能一步步跟吧,把断点断在勉强能看懂一点的地方,运行!附加!结果跑着跑着,程序就跑完了,也没报错,断点也没断下来。
仔细研究了很久,才发现Clang运行起来以后,起一个进程,它自动生成了许多参数然后又起了一个进程,后面这个进程才是真正解析程序的进程,而我把Clang源码附加上第一个进程,所以断点才断不下来,莫名其妙就运行完了。有了这个发现,后面就容易多了,附加第二个进程,果然断点断下来了,这样就可以和我手动创建的编译器实例对比,看看哪儿和人家的不一样。一对比,发现了一些端倪。
随后我直接运行Clang可执行文件,编译那个带头文件的简单代码,没发现报错,于是有了新的研究手段,看Clang的源代码,看看它是怎么运行的。
不出所料,代码是如此复杂以至于看不懂。那只能一步步跟吧,把断点断在勉强能看懂一点的地方,运行!附加!结果跑着跑着,程序就跑完了,也没报错,断点也没断下来。
仔细研究了很久,才发现Clang运行起来以后,起一个进程,它自动生成了许多参数然后又起了一个进程,后面这个进程才是真正解析程序的进程,而我把Clang源码附加上第一个进程,所以断点才断不下来,莫名其妙就运行完了。有了这个发现,后面就容易多了,附加第二个进程,果然断点断下来了,这样就可以和我手动创建的编译器实例对比,看看哪儿和人家的不一样。一对比,发现了一些端倪。
相关文章推荐
- C++ map
- c++11多线程编程-进程与线程
- 洛谷 P1508 Likecloud-吃、吃、吃
- POJ 2349 Arctic Network
- 洛谷 P1280 尼克的任务
- C语言数据类型简介
- [置顶] 值得推荐的C/C++框架和库
- c++犯的错误
- HDU-2024C语言合法标识符
- c语言--求100-200的素数
- C语言高效编程的四大绝招(1)
- C/C++ 遍历目录文件,默认目录下
- 如何初始化char数组
- 动态链接与静态链接的区别
- char数组转换成string
- 【C语言】输出1--1000以内的水仙花数
- c++ queue 用法
- 得到两个字符串中较长的字符串(c语言)
- g++编译报错原因分析expected type-specifier before
- C++中类的构造函数