LLDB 調(diào)試工具,gdb替代品;
LLVM : Low Level Virtual Machine (低級的虛擬機器)
About LLDB and Xcode
xcode 5的發(fā)布,lldb 是xcode上面的基礎(chǔ)調(diào)試器;
比如: pop 等等這些命令;

這張圖片顯示了基本的命令的使用,help 可以查看命令的幫助?
LLDB 是蘋果用來“從頭(全部)”替換了gdb的,開發(fā)中帶有LLVM編譯器的協(xié)調(diào)將會帶給你藝術(shù)狀態(tài)去調(diào)試額外的能力在控制流中和數(shù)據(jù)監(jiān)測。xcode5開始,所有的新的和先前開發(fā)的項目將會自動重新配置為使用LLDB.
標準的LLDB 暗轉(zhuǎn)給提供給你一個額外的一系列命令去設(shè)計(和GDB有點類似)。額外使用標準配置,你能夠很容易自定義LLDB 適應你的需求。
At a Glance (預覽)
lldb完全和xcode 5 集成在一起源碼開發(fā)和并且編譯運行在調(diào)試經(jīng)歷。你訪問它的狀態(tài)和使用控制xcode UI提供的內(nèi)容,并且使用命令的問題從xcode的調(diào)試控制臺上。
Understand LLDB Basics to Unlock Advanced Features (了解LLDB基礎(chǔ)解鎖高級功能)
使用lldb命令語言,你能夠使用lldb高級特點。命令的語法和常規(guī)并且容易學習。很多命令被包括成為快捷方式,節(jié)省了時間和按鍵。并且你能夠使用LLDB help 系統(tǒng)快速的檢查和學習存在命令的細節(jié)、快捷鍵、和命令選項。你可以自定義LLDB 使用命令的alias(卻別名)。你能夠擴展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的等價物,包括了-權(quán)威的和速記法的形式。
GDB and LLDB Command Examples
這個需要查看對應的lldb的命令的例子;
Standalone LLDB Workflow (獨立的lldb工作流)
你經(jīng)常會經(jīng)歷使用lldb通過使用xcode 調(diào)試特性,并且你可以使用lldb命令使用在xcode控制臺上。
然而,對于開源和其他GUI 基礎(chǔ)應用吊事,你可以使用lldb從終端窗口作為一個傳統(tǒng)的命令調(diào)試器.(????也就是在終端上進行調(diào)試?這個還沒有嘗試過)
知道lldb工作像一個命令行調(diào)試器能夠幫助你明白和使用lldb的全部能力在xcode控制臺上。
Using LLDB as a Standalone Debugger (這個需要看一下)
**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
這個是在下一節(jié)將會講到;
Getting Started with LLDB (開始使用lldb)
lldb 是一個調(diào)試命令環(huán)境類似于gdb,LLDB 提供了隱含的調(diào)試環(huán)境給xcode,xcode包括了控制臺的調(diào)試區(qū)域可以直接訪問lldb命令在xcode IDE 環(huán)境。
這一章將會剪短介紹lldb句法和命令特點,告訴你使用別名的命令和介紹你到lldb幫助系統(tǒng)。
LLDB Command Structure lldb命令結(jié)構(gòu)
所有的用戶開始使用lldb的時候應該意識到lldb命令的結(jié)構(gòu)和句法為了挖掘潛在的lldb和明白獲取最多而信息從它那里。在很多案例中,命令體用通過lldb,列表和b-work 只是類似GDB 命令和更容易學習lldb對于gdb使用者。
Understanding Command Syntax (使用命令句法)
lldb命令句法的結(jié)構(gòu)和全部常規(guī),lldb命令完全的形式:
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
command 、subcommand 是lldb調(diào)試器對象的名字。command 、subcommand 是有層次布置的。
一個特定的命令對象創(chuàng)建了一個子命令的對象(子對象跟隨著這個父命令),這個自命令對象創(chuàng)建上下文給下一個子命令對象依次類推。action 是操作,你想要執(zhí)行的內(nèi)容在聯(lián)合的調(diào)試對象中(command、subcommand實體);選項(option)是動作修飾符,通常需要一個值。參數(shù)根據(jù)所使用的命令的上下文來表示各種不同的事物.例如: 使用進程啟動命令啟動一個進程,該上下文中的參數(shù)是您在命令行上輸入的內(nèi)容,就像在調(diào)用調(diào)試會話之外的進程.。lldb命令行會解析完成在執(zhí)行之前。Commands, subcommands, options, option 值、arguments 都是用空格分開的,雙引號用于保護選項值和參數(shù)中的空格.。如果你需要輸入一個反斜杠或者雙引號字符到參數(shù),你需要在參數(shù)之前寫入一個反斜杠符號,允許在命令行中容易輸入雙引號。
(lldb) command [subcommand] -option "some "quoted" string"
也可以寫成:
(lldb) command [subcommand] -option 'some "quoted" string'
// 這個應該就是和shell語法一樣的咯
命令行縫隙設(shè)計幫助lldb命令句法常規(guī)和統(tǒng)一所有的命令。(對于gdb用戶,它也意味著你可能不要應用一些參數(shù)在lldb中而你不需要再gdb中)
下面一個例子;
(lldb) breakpoint set --file test.c --line 12
命令是從和這個模型匯總分離出來的,例如:打印 典型的自定義命令形式被創(chuàng)建通過命令機制,可以在 Command Aliases and Help. 這里去查看;
Command Aliases and Help. 命令別名,這個需要看一下
Using Command Options (使用命令選項)
LLDB中命令選項有一個權(quán)威形式和(也被引用為“discoverable”)和壓縮形式。例如:這里是一個部分命令選項在LLDB 用于命令設(shè)置斷點,列出權(quán)威性的括號。

這個文件就是我們常常使用的br命令 以及對應相應的行,方法、selector、文件名、l行號、n函數(shù)名
選項可以被放在命令行的任意位置。如果參數(shù)開始就帶有連接符 (-),你指示到LLDB ,你可以處理當前命令選項添加選項終止信號,雙連接符(- -)。例如,如果你想啟動一個進程并給進程啟動命令在-stop-at-entry 選項,想相同的進程去啟動帶有參數(shù)-program_arg_1 和-program_arg_2 的值。
(lldb) process launch --stop-at-entry -- -program_arg_1 value -program_arg_2 value
其實這個命令我還是不知道怎么使用?/(ㄒoㄒ)/~~
Using Raw Commands (使用原生的命令)
LLDB 命令解析支持“raw”命令,當命令選項被移除,剩下的命令字符串被通過無需解釋對于命令。這個對于命令來說是很便利的,參數(shù)可能有一些復雜的表達笨拙地去保護空白。例如,表達命令是一個原生的命令。
當查看一個命令的幫助的時候,輸出的命令告訴你命令是否是raw(原生的),,所以,你可以知道你想要的。原生的命令仍然能夠有選項,如果你的命令字符串有少量在里面,你只是它沒有可選的表示通過輸入一個 - - 終止符號在命令的名字后面再是在命令的字符串前面。
【應該就是想結(jié)束命令,面的不是命令】
Using Command Completion in LLDB 在LLDB 中使用完整的命令
LLDB 支持完整命令對于原始文件名字,標識名字、文件名和以及以后。終端窗口上的完成是被開始的通過輸入字符在命令上。完成在xocde的控制臺上和源碼編輯的完成上的方式一樣:completions 會被自動彈起在三個字母被寫入,和completion 彈出能夠手動召喚通過ESC見。另外,completions在xcode控制臺上跟隨著Xcode文件編輯偏好指定編輯的模板。個人的選項在一個命令能夠有不同的完成這。例如;—file<path>選項到源文件===
Comparing LLDB with GDB (比較gdb和lldb)
命令行解析和統(tǒng)一lldb命令解析和使用lldb和gdb的使用的不同。lldb命令句法有時需喲啊強迫你去更加精確的開始你的意圖,一般更多的是常規(guī)使用。
例如:設(shè)置斷點的共同操作。在GDB 中,設(shè)置斷點你可能進入到下面的foo.c代碼的第12行。
(gdb) break foo.c:12
進入斷點
(gdb) break foo
更多復雜的斷點表達可能在gdb上,一個例子:gdb斷點是foo.c::foo ,意思是設(shè)置斷點在函數(shù)foo 在foo.c的文件下。但是,在一些gdb句法中變得錯綜復雜和限制gdb函數(shù)性,尤其指的是c++,坑你不是一個很可靠的方式指定方法去設(shè)置斷點;這些缺乏的發(fā)生是因為gdb命令行句法被支持在一個復雜的指定表式的分析。
lldb斷點命令,通過比較,請求只是一個簡單、直接途徑在它的表達式中提供了有利的學習自動完成和能力去設(shè)置斷點更加的復雜情況。去設(shè)置相同的文件和行斷點在lldb中。
(lldb) breakpoint set --file foo.c --line 12
設(shè)置斷點在方法名字為foo上
(lldb) breakpoint set --name foo
設(shè)置斷點的名字更加的有效lldb相比于gdb。因為你能夠制定你想要設(shè)置的斷點在一個函數(shù)通過方法名字。設(shè)置斷點在c++方法的名字為foo中,輸入:
(lldb) breakpoint set --method foo
設(shè)置斷點在oc的selectors 名字為alignLeftEdges: 上。
你能夠限制其他斷點通過指定可執(zhí)行的映像通過使用--shlib <path> 表達式。
(lldb) breakpoint set --shlib foo.dylib --name foo
lldb命令在這段中顯示,使用發(fā)現(xiàn)命令的名字和權(quán)威性形式的選擇,可能似乎有點冗長。然而,只是當做gdb,lldb有一個剪短的名字,創(chuàng)建一個壓縮的命令形式。例如,通過下面的命令表達式示范操作相同的命令:
(lldb) breakpoint set --name "-[SKTGraphicView alignLeftEdges:]"
(lldb) br s --name "-[SKTGraphicView alignLeftEdges:]"
相似的,你能夠合并剪短唯一字符串匹配縮寫的的選項形式去減少長度。使用兩個在一起能夠減少命令的表達式。例如:
(lldb) breakpoint set --shlib foo.dylib --name foo
轉(zhuǎn)變:
(lldb) br s -s foo.dylib -n foo
使用這些lldb的特性提供很多相同的速記法想使用gdb一樣。查看斷點命令和其他段在GDB and LLDB Command Examples 中可以看到更多的例子怎么使用剪短唯一字符串匹配使用縮寫形式選項能夠保存按鍵。
Scripting with Python (python腳本)
對于高級的用戶,lldb有一個簡歷python翻譯器容易到達的通過使用腳本命令。所有的調(diào)試特性是可用的作為類在python翻譯器。結(jié)果更多的復雜的命令在gdb中被介紹定義命令能夠被實現(xiàn)通過python的函數(shù)使用lldb-python庫然后下載腳本運行會話,訪問他們帶有腳本命令。更多的信息關(guān)于lldb-python庫,查看LLDB Python Reference 和 LLDB Python Scripting Example 段在The LLDB Debugger website 上。
**Command Aliases and Help **(命令別名和幫助)
現(xiàn)在你名表了lldb語法和命令動態(tài),轉(zhuǎn)到你注意去亮哥非常有用的lldb的有用的特點,命令別名和幫互系統(tǒng)(command aliases /help system )
Understanding Command Aliases (明白命令別名)
使用lldb中的命令別名的機制去構(gòu)建別名對于共同使用的命令,例如,如果你重復輸入
(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
因為命令別名在很多情況下是很有用的,你應該熟悉他們的環(huán)境。對于一個完整的命令別名構(gòu)建的解釋,限制和語法,使用lldb幫助系統(tǒng),如:
(lldb) help command alias
注意:默認配置,常用的公共的別名命令已經(jīng)被加到lldb中(例如:步驟,下一個,繼續(xù))沒有嘗試去構(gòu)架一個測地的系列的別名。在lldb開發(fā)團隊中,很方面去構(gòu)建命令到一個字母或者2個字母給用戶,然而,很容易設(shè)置lldb命令系列成為他們喜歡的方式,lldb讀取了 ~/.lldbinit的文件。 這個文件存儲了別名,所以你能夠很容易的提醒你自己你的設(shè)置。查看當前他們定義的別名,用help -命令 然后找到當前定義好的別名在幫助輸出那里。
Using LLDB Help (使用lldb幫助)
勘察lldb幫助系統(tǒng)去獲得更多關(guān)于lldb所提供的和查看lldb命令的細節(jié)構(gòu)建。熟悉help命令給你訪問額外的命令文檔在幫助系統(tǒng)中。
一個簡單的幫助命令能夠返回一系列的頂級的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:
一個更加直接的方式去顯示lldb的用處和使用 apropos命令,它查詢了lldb的幫助文檔對于一個檔次和一個簡短的幫助字符串。

這兩個內(nèi)容: (調(diào)試的時候可以去查看)
GDB and LLDB Command Examples
Using LLDB as a Standalone Debugger