上一篇文章介紹了怎么給自己的Xcode安裝Clang插件程序,但是有個(gè)問題,當(dāng)我們想修改我們的插件代碼的時(shí)候,卻無法調(diào)試我們的程序,因?yàn)槲覀冞\(yùn)行完MyPlugin后Xcode直接生成的相應(yīng)地dylib,由于沒有輸入文件,所以我們是無法斷點(diǎn)到我們的demo程序的。這篇文章主要給大家介紹怎么調(diào)試Clang插件程序。
1.libTooling的簡介
在我們學(xué)習(xí)調(diào)試插件程序之前,先大概了解一下libTooling這個(gè)庫,根據(jù)相應(yīng)參考文件中的解釋,通過這個(gè)庫我們很容易搭建我們編譯器的前端工具。與之相對(duì)的還有一個(gè)libclang的庫,這個(gè)庫與libTooling相比就是他比較穩(wěn)定,基本上沒有什么更新。而libTooling跟clang是經(jīng)常更新的,優(yōu)缺點(diǎn)明顯,缺點(diǎn)就是可能你在舊版本能跑的程序在新版本就不能跑了,優(yōu)點(diǎn)就是提供給使用者遠(yuǎn)比libclang強(qiáng)大全面的AST解析和控制能力。至于該如何選擇用libTooling和libclang,還是看官方說法吧。下面是官網(wǎng)的地址:
http://clang.llvm.org/docs/Tooling.html
2.生成libTooling程序
這步跟上一遍文章生成myPlugin差不多
1.生成MyPluginTooling文件
2.添加myPluginTooling代碼,其實(shí)就是把昨天的MyPlugin代碼的靜態(tài)注冊(cè)插件static clang::FrontendPluginRegistry::AddX("MyPlugin", "My plugin");的部分改成以下代碼。
同時(shí)把這個(gè)MyPluginASTAction這個(gè)方法給刪了,以及更改成繼承ASTFrontendAction
3.添加CMakeLists.txt文件,這個(gè)文件主要是用來設(shè)置運(yùn)行你這個(gè)cpp所用到的庫和相應(yīng)的支持
4.然后外面的CMakeLists.txt文件添加下面這一行
5.跟上篇文章一樣CMake來更新相應(yīng)的LLVM程序
6.最后看是否編譯成功,確實(shí)是成功的
7.但是我們此時(shí)和上篇文章有一個(gè)問題,就是沒有輸入文件,我們執(zhí)行這個(gè)程序是沒有任何效果的。這就需要我們給她指定一個(gè)輸入文件。在Manage Scheme里面一個(gè)一個(gè)添加下面這些配置:
/Users/yockieyang/Desktop/homeWork/test1/test1/adsd_dasd.m
--
-isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
-isystem
-I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.1.0/include
-I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
-I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include
-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks
上面—是高速你要編譯這個(gè)adsd_dasd.m文件必須使用下面-I,-F標(biāo)出來的庫,也就是當(dāng)編譯器執(zhí)行到adsd_dasd.m里面的#import 這段代碼的時(shí)候,系統(tǒng)會(huì)在你標(biāo)注中的-I,-F的庫尋找相應(yīng)的文件,編譯才能正常執(zhí)行下去。否則會(huì)報(bào)找不到的錯(cuò)誤。
8.最后編譯運(yùn)行,效果和上篇文章一樣
9.但是我們卻可以斷點(diǎn)調(diào)了
3.總結(jié)
這篇文章主要告訴你怎么樣調(diào)試Xcode clang 程序,具體clang,AST相關(guān)的知識(shí)將在以后學(xué)習(xí)給出來