iOS调试技巧使用Python 自定义LLDB
终极管理员 知识笔记 85阅读
一、类介绍
二、断点调试示例
在使用Python 自定义LLDB之前先了解一下LLDB的一些类型
SBTarget 正在被调试的程序SBProcess 和程序关联的具体的进程SBThread 执行的线程SBFrame 和线程关联的一个栈帧SBVariable 变量寄存器或是一个表达式一般情况下我们取到SBFrame就可以进行方法调用来打印关键信息

在写Python前先使用Xcode断点执行一下
自定义类MyClass
.h文件

interface MyClass : NSObject (NSString *)lldbTest;end
.m文件
implementation MyClass (NSString *)lldbTest { return lldb test successed;}end
中断程序
打开lldb控制台
下面就开始写lldb的命令
预期目标打印出[MyClass lldbTest]的返回值
输入script
(lldb) scriptPython Interactive Interpreter. To exit, type quit(), exit().>>>
定义变量test接收MyClass lldbTest]的返回值
>>> test lldb.frame.EvaluateExpression((NSString *)[MyClass lldbTest]).GetObjectDescription()
打印变量test
>>> print(test)
至此直接在Xcode中使用lldb打印出[MyClass lldbTest]的返回值就完成了
三、编写Python如果想把这个功能打包起来使用一句命令调用就需要使用Python来扩展我们的lldb命令
1、新建Python文件这里将Python文件命名问lldbtest.py
1、引入lldb头文件import lldb
2、初始化函数 def __lldb_init_module(debugger, internal_dict): debugger.HandleCommand()
在HandleCommand中添加命令
command script add lldb_test -f lldbtest.test
lldb_test表示命令名称lldbtest是Python文件名test是自定义方法名
初始化函数最终
def __lldb_init_module(debugger, internal_dict): debugger.HandleCommand(command script add lldb_test -f lldbtest.test)
3、自定义Python方法 获取当前的frame栈帧
target debugger.GetSelectedTarget() process target.GetProcess() thread process.GetSelectedThread() currentFrame thread.GetSelectedFrame()
调用方法
def test(debugger, command, result, internal_dict): target debugger.GetSelectedTarget() process target.GetProcess() thread process.GetSelectedThread() currentFrame thread.GetSelectedFrame() test currentFrame.EvaluateExpression((NSString *)[Person lldbTest]).GetObjectDescription() print(result:%s % test)
整个Python文件
#自定义lldb命令 import lldbdef test(debugger, command, result, internal_dict): target debugger.GetSelectedTarget() process target.GetProcess() thread process.GetSelectedThread() currentFrame thread.GetSelectedFrame() test currentFrame.EvaluateExpression((NSString *)[Person lldbTest]).GetObjectDescription() print(result:%s % test)def __lldb_init_module(debugger, internal_dict): debugger.HandleCommand(command script add lldb_test -f lldbtest.test)
四、自动加载python脚本 原理xcode启动的时候会读取一个默认文件:~/.lldbinit
只需要将命令command script import /Users/xx/Desktop/lldbtest.py 写入这个文件即可。
/Users/xx/Desktop/lldbtest.py是Python文件路径
测试
标签: