debugserver+lldb使用

一、概述

debugserver、lldb是協同工作的,debugserver依附在APP上,時刻監聽APP的運行狀態,並有控制APP執行的能力;lldb是在APP外部的,可以和debugserver建立連接,通過debugserver獲取APP運行狀態,並且能通知debugserverAPP做一些事情。在真機調試的時候,Xcodedebugserver加入到APP中,通過lldb來調試APP,那麼同樣也可以在iterm上對越獄手機上的任意APP進行調試。

Mac(Xcode(lldb)) -> APP(debugserver)

二、debugserver位置

Xcodedebugserver的位置:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/13.2 如下圖:

position.jpg

雙擊dmg查看debugserver位置:/usr/bin/debugserver如下圖:

debugserver.jpg

知道debugserver的位置後,可以使用該工具scp到越獄手機上,附加到任意應用。

三、越獄手機調試環境配置

1、處理Xcode中獲取手機對應版本的debugserver工具

查看描述文件:

ldid -e debugserver

導出描述文件:

ldid -e debugserver > debuger.entitlements

在描述文件中新增get-task-allow、task_for_pid-allow字段設置爲YES

allow.jpg

使用描述文件對debugserver工具進行重簽名:

ldid -Sdebuger.entitlements debugserver

簽名後的debugserver就可以用到越獄手機上調試了。

使用scp工具將debugserver傳入到越獄手機中:

scp -r debugserver root@10.15.32.45:/usr/bin/

2、越獄手機啓動debugserver服務

debugserver ip:port –a app ip對應的手機ip直接使用*,port爲對外開放的端口號(可以自定義)app爲要附加的應用名稱。

查看進程:

ps -A

debugserver附加到微信進程上:

debugserver *:12345 –a WeChat

3、使用Mac終端啓動lldb和越獄手機上的debugserver建立連接

在終端運行lldb,連接debugserver

process connect connect://127.0.01:12345

這樣就連接上了,可使用lldb來調試越獄手機上的應用。

注意:在手機的/Developer/usr/bin/中也存在手機對應的debugserver工具,同上我們可以將該debugserver傳到電腦上,重簽名後再回傳到手機/usr/bin/

四、lldb常用命令

breakpoint使用

1、下斷點

breakpoint set --name test1 

breakpoint set -n test1 

打印:

Breakpoint 2: where = LLDB`-[ViewController test1] + 23 at ViewController.m:25:5, address = 0x0000000109de9f97

斷點位置信息,執行便能在該處斷住。

連續下多個斷點:

breakpoint set -n "-[ViewController save:]" -n "-[ViewController pause:]" -n "-[ViewController continues:]"

運行c繼續運行,n單步執行,s進入函數內部執行,finish執行到函數尾部。

2、查看斷點列表

breakpoint list

打印:

1: file = '/Users/hibo/Documents/test/LLDB/LLDB/ViewController.m', line = 21, exact_match = 0, locations = 1 Options: disabled 

 1.1: where = LLDB`-[ViewController touchesBegan:withEvent:] + 70 at ViewController.m:22:6, address = 0x0000000109de9f46, unresolved, hit count = 2 Options: disabled 

2: name = 'test1', locations = 1, resolved = 1, hit count = 7

 2.1: where = LLDB`-[ViewController test1] + 23 at ViewController.m:25:5, address = 0x0000000109de9f97, resolved, hit count = 7 

3、禁用斷點

breakpoint disable  //禁用所有斷點
breakpoint disable 1.1 //禁用第一個斷點

4、啓用斷點

breakpoint enable   //啓用所有斷點
breakpoint enable 1.1  //啓用1處斷點  

5、刪除所有斷點

breakpoint delete
breakpoint delete 1

刪除只能刪除一組,不能單個刪除

6、設置selector

breakpoint set --selector touchesBegan:withEvent:

將爲所有該方法設置斷點

7、設置文件中的selector斷點

breakpoint set --file ViewController.m --selector touchesBegan:withEvent:

8、設置帶有相同字符串的方法斷點

breakpoint set -r Game:

打印:

Current breakpoints:

1: regex = 'Game:', locations = 3, resolved = 3, hit count = 0

 1.1: where = LLDB`-[ViewController pauseGame:] + 43 at ViewController.m:31:5, address = 0x00000001010dff0b, resolved, hit count = 0 

 1.2: where = LLDB`-[ViewController continueGame:] + 43 at ViewController.m:34:5, address = 0x00000001010dff5b, resolved, hit count = 0 

 1.3: where = LinkPresentation`-[LPGameCenterInvitationMetadata setGame:], address = 0x00007fff2733e5e9, resolved, hit count = 0 

如上也給其他帶有Game字符的類下了斷點。

給某一個文件下的帶有相同字符串的方法下斷點:

breakpoint set --file ViewController.m -r Game

簡寫:breakpoint->b
打印列表需要寫全:breakpoint list或者break list

bt、frame命令

1、查看函數相關信息,使用p、down追蹤函數的調用和被調用關係

frame select

使用bt命令查看函數調用堆棧

2、查找方法的調用者及方法名稱

frame variable

methods、pviews

1、methods打印當前對象的屬性和方法

methods self 

2、pviews打印當前視圖的層級結構

以上兩個命令是lldb插件名中的命令。chisel安裝

……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章