LLDB 調(diào)試工具杏节,gdb替代品;
LLVM : Low Level Virtual Machine (低級(jí)的虛擬機(jī)器)
About LLDB and Xcode
xcode 5的發(fā)布师倔,lldb 是xcode上面的基礎(chǔ)調(diào)試器爽篷;
比如: pop 等等這些命令;
這張圖片顯示了基本的命令的使用酝静,help 可以查看命令的幫助节榜?
LLDB 是蘋果用來“從頭(全部)”替換了gdb的,開發(fā)中帶有LLVM編譯器的協(xié)調(diào)將會(huì)帶給你藝術(shù)狀態(tài)去調(diào)試額外的能力在控制流中和數(shù)據(jù)監(jiān)測(cè)别智。xcode5開始宗苍,所有的新的和先前開發(fā)的項(xiàng)目將會(huì)自動(dòng)重新配置為使用LLDB.
標(biāo)準(zhǔn)的LLDB 暗轉(zhuǎn)給提供給你一個(gè)額外的一系列命令去設(shè)計(jì)(和GDB有點(diǎn)類似)。額外使用標(biāo)準(zhǔn)配置薄榛,你能夠很容易自定義LLDB 適應(yīng)你的需求讳窟。
At a Glance (預(yù)覽)
lldb完全和xcode 5 集成在一起源碼開發(fā)和并且編譯運(yùn)行在調(diào)試經(jīng)歷。你訪問它的狀態(tài)和使用控制xcode UI提供的內(nèi)容敞恋,并且使用命令的問題從xcode的調(diào)試控制臺(tái)上丽啡。
Understand LLDB Basics to Unlock Advanced Features (了解LLDB基礎(chǔ)解鎖高級(jí)功能)
使用lldb命令語(yǔ)言,你能夠使用lldb高級(jí)特點(diǎn)硬猫。命令的語(yǔ)法和常規(guī)并且容易學(xué)習(xí)补箍。很多命令被包括成為快捷方式改执,節(jié)省了時(shí)間和按鍵。并且你能夠使用LLDB help 系統(tǒng)快速的檢查和學(xué)習(xí)存在命令的細(xì)節(jié)坑雅、快捷鍵辈挂、和命令選項(xiàng)。你可以自定義LLDB 使用命令的alias(卻別名)裹粤。你能夠擴(kuò)展lldb通過使用python腳本和python-lldb.
Use LLDB Equivalents for Common GDB Commands (使用lldb和我們一般使用gcb是有相同的能力去調(diào)試的)
lldb包括了許多別名命令設(shè)置和gdb是一樣的终蒂。如果你已經(jīng)經(jīng)歷過了使用gdb命令, 你能夠使用提供的表去查找gdb命令并且能夠找到lldb的等價(jià)物遥诉,包括了-權(quán)威的和速記法的形式拇泣。
GDB and LLDB Command Examples
這個(gè)需要查看對(duì)應(yīng)的lldb的命令的例子;
Standalone LLDB Workflow (獨(dú)立的lldb工作流)
你經(jīng)常會(huì)經(jīng)歷使用lldb通過使用xcode 調(diào)試特性矮锈,并且你可以使用lldb命令使用在xcode控制臺(tái)上霉翔。
然而,對(duì)于開源和其他GUI 基礎(chǔ)應(yīng)用吊事愕难,你可以使用lldb從終端窗口作為一個(gè)傳統(tǒng)的命令調(diào)試器.(????也就是在終端上進(jìn)行調(diào)試早龟?這個(gè)還沒有嘗試過)
知道lldb工作像一個(gè)命令行調(diào)試器能夠幫助你明白和使用lldb的全部能力在xcode控制臺(tái)上惫霸。
Using LLDB as a Standalone Debugger (這個(gè)需要看一下)
**See Also **(其他關(guān)聯(lián)的文章)
For a good look at how to use Xcode’s debugging features, all powered by the LLDB debugging engine, see the WWDC 2013 session video for Tools #407 WWDC 2013: Debugging with Xcode.
To see the latest advanced techniques to help you efficiently track down bugs with LLDB, view the WWDC 2013 session video for Tools #413 WWDC 2013: Advanced Debugging with LLDB.
For more information about the use of LLDB Python scripting and other advanced capabilities, visit: The LLDB Debugger.
Getting Started with LLDB
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-basics.html
這個(gè)是在下一節(jié)將會(huì)講到猫缭;
Getting Started with LLDB (開始使用lldb)
lldb 是一個(gè)調(diào)試命令環(huán)境類似于gdb,LLDB 提供了隱含的調(diào)試環(huán)境給xcode壹店,xcode包括了控制臺(tái)的調(diào)試區(qū)域可以直接訪問lldb命令在xcode IDE 環(huán)境猜丹。
這一章將會(huì)剪短介紹lldb句法和命令特點(diǎn),告訴你使用別名的命令和介紹你到lldb幫助系統(tǒng)硅卢。
LLDB Command Structure lldb命令結(jié)構(gòu)
所有的用戶開始使用lldb的時(shí)候應(yīng)該意識(shí)到lldb命令的結(jié)構(gòu)和句法為了挖掘潛在的lldb和明白獲取最多而信息從它那里射窒。在很多案例中,命令體用通過lldb将塑,列表和b-work 只是類似GDB 命令和更容易學(xué)習(xí)lldb對(duì)于gdb使用者脉顿。
Understanding Command Syntax (使用命令句法)
lldb命令句法的結(jié)構(gòu)和全部常規(guī),lldb命令完全的形式:
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
command 点寥、subcommand 是lldb調(diào)試器對(duì)象的名字艾疟。command 、subcommand 是有層次布置的敢辩。
一個(gè)特定的命令對(duì)象創(chuàng)建了一個(gè)子命令的對(duì)象(子對(duì)象跟隨著這個(gè)父命令)蔽莱,這個(gè)自命令對(duì)象創(chuàng)建上下文給下一個(gè)子命令對(duì)象依次類推。action 是操作戚长,你想要執(zhí)行的內(nèi)容在聯(lián)合的調(diào)試對(duì)象中(command盗冷、subcommand實(shí)體);選項(xiàng)(option)是動(dòng)作修飾符同廉,通常需要一個(gè)值仪糖。參數(shù)根據(jù)所使用的命令的上下文來表示各種不同的事物.例如: 使用進(jìn)程啟動(dòng)命令啟動(dòng)一個(gè)進(jìn)程柑司,該上下文中的參數(shù)是您在命令行上輸入的內(nèi)容,就像在調(diào)用調(diào)試會(huì)話之外的進(jìn)程.锅劝。lldb命令行會(huì)解析完成在執(zhí)行之前帜羊。Commands, subcommands, options, option 值、arguments 都是用空格分開的鸠天,雙引號(hào)用于保護(hù)選項(xiàng)值和參數(shù)中的空格.讼育。如果你需要輸入一個(gè)反斜杠或者雙引號(hào)字符到參數(shù),你需要在參數(shù)之前寫入一個(gè)反斜杠符號(hào)稠集,允許在命令行中容易輸入雙引號(hào)奶段。
(lldb) command [subcommand] -option "some "quoted" string"
也可以寫成:
(lldb) command [subcommand] -option 'some "quoted" string'
// 這個(gè)應(yīng)該就是和shell語(yǔ)法一樣的咯
命令行縫隙設(shè)計(jì)幫助lldb命令句法常規(guī)和統(tǒng)一所有的命令。(對(duì)于gdb用戶剥纷,它也意味著你可能不要應(yīng)用一些參數(shù)在lldb中而你不需要再gdb中)
下面一個(gè)例子痹籍;
(lldb) breakpoint set --file test.c --line 12
命令是從和這個(gè)模型匯總分離出來的,例如:打印 典型的自定義命令形式被創(chuàng)建通過命令機(jī)制晦鞋,可以在 Command Aliases and Help. 這里去查看蹲缠;
Command Aliases and Help. 命令別名,這個(gè)需要看一下
Using Command Options (使用命令選項(xiàng))
LLDB中命令選項(xiàng)有一個(gè)權(quán)威形式和(也被引用為“discoverable”)和壓縮形式悠垛。例如:這里是一個(gè)部分命令選項(xiàng)在LLDB 用于命令設(shè)置斷點(diǎn)线定,列出權(quán)威性的括號(hào)。
這個(gè)文件就是我們常常使用的br命令 以及對(duì)應(yīng)相應(yīng)的行确买,方法斤讥、selector、文件名湾趾、l行號(hào)芭商、n函數(shù)名
選項(xiàng)可以被放在命令行的任意位置。如果參數(shù)開始就帶有連接符 (-)搀缠,你指示到LLDB 铛楣,你可以處理當(dāng)前命令選項(xiàng)添加選項(xiàng)終止信號(hào),雙連接符(- -)艺普。例如簸州,如果你想啟動(dòng)一個(gè)進(jìn)程并給進(jìn)程啟動(dòng)命令在-stop-at-entry 選項(xiàng),想相同的進(jìn)程去啟動(dòng)帶有參數(shù)-program_arg_1 和-program_arg_2 的值衷敌。
(lldb) process launch --stop-at-entry -- -program_arg_1 value -program_arg_2 value
其實(shí)這個(gè)命令我還是不知道怎么使用勿侯?/(ㄒoㄒ)/~~
Using Raw Commands (使用原生的命令)
LLDB 命令解析支持“raw”命令,當(dāng)命令選項(xiàng)被移除缴罗,剩下的命令字符串被通過無(wú)需解釋對(duì)于命令助琐。這個(gè)對(duì)于命令來說是很便利的,參數(shù)可能有一些復(fù)雜的表達(dá)笨拙地去保護(hù)空白面氓。例如兵钮,表達(dá)命令是一個(gè)原生的命令蛆橡。
當(dāng)查看一個(gè)命令的幫助的時(shí)候,輸出的命令告訴你命令是否是raw(原生的)掘譬,泰演,所以,你可以知道你想要的葱轩。原生的命令仍然能夠有選項(xiàng)睦焕,如果你的命令字符串有少量在里面,你只是它沒有可選的表示通過輸入一個(gè) - - 終止符號(hào)在命令的名字后面再是在命令的字符串前面靴拱。
【應(yīng)該就是想結(jié)束命令垃喊,面的不是命令】
Using Command Completion in LLDB 在LLDB 中使用完整的命令
LLDB 支持完整命令對(duì)于原始文件名字,標(biāo)識(shí)名字袜炕、文件名和以及以后本谜。終端窗口上的完成是被開始的通過輸入字符在命令上。完成在xocde的控制臺(tái)上和源碼編輯的完成上的方式一樣:completions 會(huì)被自動(dòng)彈起在三個(gè)字母被寫入偎窘,和completion 彈出能夠手動(dòng)召喚通過ESC見乌助。另外,completions在xcode控制臺(tái)上跟隨著Xcode文件編輯偏好指定編輯的模板陌知。個(gè)人的選項(xiàng)在一個(gè)命令能夠有不同的完成這他托。例如;—file<path>選項(xiàng)到源文件===
Comparing LLDB with GDB (比較gdb和lldb)
命令行解析和統(tǒng)一lldb命令解析和使用lldb和gdb的使用的不同纵诞。lldb命令句法有時(shí)需喲啊強(qiáng)迫你去更加精確的開始你的意圖上祈,一般更多的是常規(guī)使用。
例如:設(shè)置斷點(diǎn)的共同操作浙芙。在GDB 中,設(shè)置斷點(diǎn)你可能進(jìn)入到下面的foo.c代碼的第12行籽腕。
(gdb) break foo.c:12
進(jìn)入斷點(diǎn)
(gdb) break foo
更多復(fù)雜的斷點(diǎn)表達(dá)可能在gdb上嗡呼,一個(gè)例子:gdb斷點(diǎn)是foo.c::foo ,意思是設(shè)置斷點(diǎn)在函數(shù)foo 在foo.c的文件下皇耗。但是南窗,在一些gdb句法中變得錯(cuò)綜復(fù)雜和限制gdb函數(shù)性,尤其指的是c++郎楼,坑你不是一個(gè)很可靠的方式指定方法去設(shè)置斷點(diǎn)万伤;這些缺乏的發(fā)生是因?yàn)間db命令行句法被支持在一個(gè)復(fù)雜的指定表式的分析。
lldb斷點(diǎn)命令呜袁,通過比較敌买,請(qǐng)求只是一個(gè)簡(jiǎn)單、直接途徑在它的表達(dá)式中提供了有利的學(xué)習(xí)自動(dòng)完成和能力去設(shè)置斷點(diǎn)更加的復(fù)雜情況阶界。去設(shè)置相同的文件和行斷點(diǎn)在lldb中虹钮。
(lldb) breakpoint set --file foo.c --line 12
設(shè)置斷點(diǎn)在方法名字為foo上
(lldb) breakpoint set --name foo
設(shè)置斷點(diǎn)的名字更加的有效lldb相比于gdb聋庵。因?yàn)槟隳軌蛑贫阆胍O(shè)置的斷點(diǎn)在一個(gè)函數(shù)通過方法名字。設(shè)置斷點(diǎn)在c++方法的名字為foo中芙粱,輸入:
(lldb) breakpoint set --method foo
設(shè)置斷點(diǎn)在oc的selectors 名字為alignLeftEdges: 上祭玉。
你能夠限制其他斷點(diǎn)通過指定可執(zhí)行的映像通過使用--shlib <path> 表達(dá)式。
(lldb) breakpoint set --shlib foo.dylib --name foo
lldb命令在這段中顯示春畔,使用發(fā)現(xiàn)命令的名字和權(quán)威性形式的選擇脱货,可能似乎有點(diǎn)冗長(zhǎng)。然而律姨,只是當(dāng)做gdb蹭劈,lldb有一個(gè)剪短的名字,創(chuàng)建一個(gè)壓縮的命令形式线召。例如铺韧,通過下面的命令表達(dá)式示范操作相同的命令:
(lldb) breakpoint set --name "-[SKTGraphicView alignLeftEdges:]"
(lldb) br s --name "-[SKTGraphicView alignLeftEdges:]"
相似的,你能夠合并剪短唯一字符串匹配縮寫的的選項(xiàng)形式去減少長(zhǎng)度缓淹。使用兩個(gè)在一起能夠減少命令的表達(dá)式哈打。例如:
(lldb) breakpoint set --shlib foo.dylib --name foo
轉(zhuǎn)變:
(lldb) br s -s foo.dylib -n foo
使用這些lldb的特性提供很多相同的速記法想使用gdb一樣。查看斷點(diǎn)命令和其他段在GDB and LLDB Command Examples 中可以看到更多的例子怎么使用剪短唯一字符串匹配使用縮寫形式選項(xiàng)能夠保存按鍵讯壶。
Scripting with Python (python腳本)
對(duì)于高級(jí)的用戶料仗,lldb有一個(gè)簡(jiǎn)歷python翻譯器容易到達(dá)的通過使用腳本命令。所有的調(diào)試特性是可用的作為類在python翻譯器伏蚊。結(jié)果更多的復(fù)雜的命令在gdb中被介紹定義命令能夠被實(shí)現(xiàn)通過python的函數(shù)使用lldb-python庫(kù)然后下載腳本運(yùn)行會(huì)話立轧,訪問他們帶有腳本命令。更多的信息關(guān)于lldb-python庫(kù)躏吊,查看LLDB Python Reference 和 LLDB Python Scripting Example 段在The LLDB Debugger website 上氛改。
**Command Aliases and Help **(命令別名和幫助)
現(xiàn)在你名表了lldb語(yǔ)法和命令動(dòng)態(tài),轉(zhuǎn)到你注意去亮哥非常有用的lldb的有用的特點(diǎn)比伏,命令別名和幫互系統(tǒng)(command aliases /help system )
Understanding Command Aliases (明白命令別名)
使用lldb中的命令別名的機(jī)制去構(gòu)建別名對(duì)于共同使用的命令胜卤,例如,如果你重復(fù)輸入
(lldb) breakpoint set --file foo.c --line 12
可以通過別名來構(gòu)建:
(lldb) command alias bfl breakpoint set -f %1 -l %2
你可以輸入命令如下:
(lldb) bfl foo.c 12
因?yàn)槊顒e名在很多情況下是很有用的赁项,你應(yīng)該熟悉他們的環(huán)境葛躏。對(duì)于一個(gè)完整的命令別名構(gòu)建的解釋,限制和語(yǔ)法悠菜,使用lldb幫助系統(tǒng)舰攒,如:
(lldb) help command alias
注意:默認(rèn)配置,常用的公共的別名命令已經(jīng)被加到lldb中(例如:步驟悔醋,下一個(gè)摩窃,繼續(xù))沒有嘗試去構(gòu)架一個(gè)測(cè)地的系列的別名。在lldb開發(fā)團(tuán)隊(duì)中篙顺,很方面去構(gòu)建命令到一個(gè)字母或者2個(gè)字母給用戶偶芍,然而充择,很容易設(shè)置lldb命令系列成為他們喜歡的方式,lldb讀取了 ~/.lldbinit的文件匪蟀。 這個(gè)文件存儲(chǔ)了別名椎麦,所以你能夠很容易的提醒你自己你的設(shè)置。查看當(dāng)前他們定義的別名材彪,用help -命令 然后找到當(dāng)前定義好的別名在幫助輸出那里观挎。
Using LLDB Help (使用lldb幫助)
勘察lldb幫助系統(tǒng)去獲得更多關(guān)于lldb所提供的和查看lldb命令的細(xì)節(jié)構(gòu)建。熟悉help命令給你訪問額外的命令文檔在幫助系統(tǒng)中段化。
一個(gè)簡(jiǎn)單的幫助命令能夠返回一系列的頂級(jí)的lldb命令嘁捷。例如: 下面列表:
command unalias b // 取消別名
command alias b breakpoint
A more directed way to explore what’s available in LLDB is to use the apropos command: It searches the LLDB help documentation for a word and dumps a summary help string for each matching command. For example:
一個(gè)更加直接的方式去顯示lldb的用處和使用 apropos命令,它查詢了lldb的幫助文檔對(duì)于一個(gè)檔次和一個(gè)簡(jiǎn)短的幫助字符串显熏。
這兩個(gè)內(nèi)容: (調(diào)試的時(shí)候可以去查看)
GDB and LLDB Command Examples
Using LLDB as a Standalone Debugger