调试Xcode
2022-08-04 本文已影响0人
笑破天
Xcode功能很强大,经常疑惑于Xcode的一些功能是怎么实现的
1.禁用Rootless 与开启调试功能
为了提高系统的安全性,Mac OS X 10.11开始引入了Rootless(System Integrity Protection),在Rootless开启的情况下,LLDB无法调试到其它进程(模拟器内的进程除外).如果想调试其它进程,需要关闭Rootless.
lldb -n Finder
error: attach failed: cannot attach to process due to System Integrity Protection
M1恢复模式+禁用Rootless:
关机,长按开机按键15s左右,选项,选择管理员用户输入密码,顶部菜单中找到 Utilities 菜单并选择 Terminal,输入以下命令
csrutil disable // 禁用
reboot // 重启
2. attach Xcode
- 打开一个终端标签页(cmd+t),按下cmd+shift+i设置标签标题为LLDB,另开一个标签页,起名为Xcode stderr。命名只是为了方便区分,标签名字不同与此,可通过tty命令查看,后续重定向process log会用到。通过命令
echo "hello debugger" 1>/dev/ttys002
来验证tty可用性。(该步骤非必须)
2.进入lldb,退出是ctrl+d
3.绑定目标可执行文件路径
(lldb) file /Applications/Xcode.app/Contents/MacOS/Xcode
Current executable set to '/Applications/Xcode.app/Contents/MacOS/Xcode' (x86_64).
其中/Applications/Xcode.app/Contents/MacOS/Xcode为Xcode的可执行路径,在Xcode打开的情况下可以通过命令ps -ef `pgrep -x Xcode`获取
4.启动并重定向到终端ttys002
(lldb) process launch -e /dev/ttys002 --
Process 92898 launched: '/Applications/Xcode.app/Contents/MacOS/Xcode' (x86_64)
至此,已成功attach上Xcode了
3. 调试Xcode
lldb 进入lldb
ctrl+d 退出lldb
ctrl+c 进入断点模式
c 跳过断点
(lldb) b -[NSView hitTest:] 设置断点
(lldb) po $rdi 打印mac构架寄存器
(lldb) po [[[$rdi superclass] superclass] superclass]
(lldb) help breakpoint 帮助命令
4. Xcode debug app怎么实现内存监控
通过Accessibility Inspector(Xcode自带)去审查,发现类型为NSTextFieldCell
遇到问题
1、lldb -n "Xcode"报错
(lldb) process attach --name "Xcode"
error: attach failed: attach failed ((os/kern) invalid argument)