一、什么叫動(dòng)態(tài)調(diào)試
將程序運(yùn)行起來(lái)李皇,通過(guò)下斷點(diǎn)门烂、打印等方式,查看參數(shù)送挑、返回值、函數(shù)調(diào)用流程等暖眼。
二惕耕、Xcode的動(dòng)態(tài)調(diào)試原理
2.1、原理圖
調(diào)試原理圖
2.2诫肠、關(guān)于GCC司澎、LLVM、GDB栋豫、LLDB
2.3挤安、debugserver
-
debugserver
一開(kāi)始存放在Mac
的Xcode
里面:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/13.1/DeveloperDiskImage.dmg/usr/bin/debugserver
- 當(dāng)
Xcode
識(shí)別到手機(jī)設(shè)備時(shí),Xcode
會(huì)自動(dòng)將debugserver
安裝到iPhone
上
/Developer/usr/bin/debugserver
2.4丧鸯、Xcode調(diào)試的局限性
一般情況下漱受,只能調(diào)試通過(guò)Xcode
安裝的APP
三、動(dòng)態(tài)調(diào)試任意APP
3.1骡送、原理圖
動(dòng)態(tài)調(diào)試任意APP原理圖
3.1昂羡、debugserver權(quán)限問(wèn)題
默認(rèn)情況下,/Developer/usr/bin/debugserver
缺少一定的權(quán)限
3.2摔踱、debugserver存放位置
將已經(jīng)簽好權(quán)限的debugserver
放到/usr/bin
目錄虐先,便于找到debugserver
指令
四、debugserver調(diào)試任意app
1.端口轉(zhuǎn)發(fā)
iproxy 12345 12345
注意:不可用端口22轉(zhuǎn)發(fā)派敷,會(huì)出現(xiàn)如下錯(cuò)誤
error: failed to get reply to handshake packet
2.debugserver附加
2.1ssh連接手機(jī)
ssh root@192.168.31.254
2.2選擇附加app進(jìn)程
ps -A
2.3 附加app
debugserver localhost:12345 -a 5132
出現(xiàn)如下代表附加成功
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.98
for arm64.
Attaching to process 5132...
Listening to port 12345 for a connection from localhost...
3.lldb連接debugserver
3.1 啟動(dòng)lldb
lldb
3.2 連接debugserver服務(wù)
process connect connect://localhost:12345
出現(xiàn)如下代表連接成功
Process 5132 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x000000019810abc4 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x19810abc4 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x19810abc8 <+0>: mov x16, #-0x20
0x19810abcc <+4>: svc #0x80
0x19810abd0 <+8>: ret
libsystem_kernel.dylib`semaphore_signal_trap:
0x19810abd4 <+0>: mov x16, #-0x21
0x19810abd8 <+4>: svc #0x80
0x19810abdc <+8>: ret
libsystem_kernel.dylib`semaphore_signal_all_trap:
0x19810abe0 <+0>: mov x16, #-0x22
Target 0: (putong) stopped.
3.3 使用lldb的c命令讓程序先繼續(xù)運(yùn)行
c
五蛹批、有關(guān)debugserver例子
Debugserver+lldb調(diào)試失敗撰洗,error: Failed to connect port
實(shí)戰(zhàn):干掉高德地圖7.2.0版iOS客戶端的反動(dòng)態(tài)調(diào)試保護(hù)