【发布时间】:2014-12-04 22:40:55
【问题描述】:
在将源代码传递给 Clang 进行编译时,哪些 LLVM/Clang 代码以什么顺序执行?
【问题讨论】:
-
如果这是平台和/或 IDE 相关的,那么我在 OS X 10.10 Yosemite 和 Xcode 6.1.1 的上下文中提出这个问题。
标签: compiler-construction osx-yosemite xcode6.1 llvm-clang
在将源代码传递给 Clang 进行编译时,哪些 LLVM/Clang 代码以什么顺序执行?
【问题讨论】:
标签: compiler-construction osx-yosemite xcode6.1 llvm-clang
你到底是什么意思?您是对编译阶段感兴趣,还是想查看特定方法或类的堆栈跟踪?
编译阶段:
假设您通过在终端中输入clang main.c 将一些源文件传递给clang。
clang 命令本身只是一个使用参数并调用实际编译器的驱动程序(您可以通过将clang 传递给-cc1 参数直接调用它)。
然后,编译器本身会做以下工作:
#define、#ifdef 等)if 关键字、while 关键字、your_var 标识符等)堆栈跟踪:
如果您想查看堆栈跟踪或调试报告,那么您自己构建 Clang 是有意义的。
以下是通过 Git 将 LLVM 存储库克隆到硬盘驱动器后使用 Xcode 在 OS X 上编译 LLVM/Clang 的说明:
首先,下载 LLVM 的源文件:
mkdir ~/Projects/clang-dev
cd ~/Projects/clang-dev
git clone http://llvm.org/git/llvm.git
git clone http://llvm.org/git/clang.git llvm/tools/clang
git clone http://llvm.org/git/clang-tools-extra.git llvm/tools/clang/tools/extra
git clone http://llvm.org/git/compiler-rt.git llvm/projects/compiler-rt
您还可以通过将分支名称传递给每个克隆命令来指定确切的版本,例如:
git clone http://llvm.org/git/llvm.git -b release_34
接下来,创建并打开一个 Xcode 项目:
cd ~/Projects/clang-dev
mkdir build
cd build
cmake -G Xcode CMAKE_BUILD_TYPE="Debug" ../llvm
open LLVM.xcodeproj
将clang 设置为项目的当前目标/方案,单击“编辑方案”,并添加一个源文件,以便在 Clang 运行时作为参数传递给它:
差不多就是这样;只需设置一个断点(在main 方法中或任何你想要的时候)并点击Run 按钮(或按Cmd + R)。
UPD
这里有更详细的指南:Getting started with LLVM/Clang on OS X
有用的链接:
Architecture of Open-Source Applications: LLVM by Chris Lattner
【讨论】: