LLDB探究


LLDB是个开源的内置于XCode中的调试器,Xcode5之后,LLDB取代了GDB. 它与LLVM编译器一起,存在于主窗口底部的控制台中,LLDB丰富的流程控制,在调试过程中作用显著

断点设置

设置断点
breakpoint set -n "xxx"

断点禁用
breakpoint disable 组号

删除断点
breakpoint delete 组号

命令简写

在断点处添加其他指令
    breakpoint commond add 断点组号

删除断点处添加的指令
breakpoint commond delete 断点组号

执行代码

查看视图层级

修改代码

执行多行代码
注意,多行代码换行时需同时按住control键+enter键

获取变量
注意,变量获取默认为id类型,需要强转

查看页面结构
po [self.view.window recursiveDescription]

查看堆栈信息

查看函数调用栈
bt

跳转到函数栈中的上/下一个函数
up/down
frame selector 方法标号

查看当前函数的变量
frame variable

代码回滚(回到函数调用处)
thread return

内存断点

对属性打断点
watchpoint set variable 变量

通过内存地址打断点
watchpoint set expresion 内存地址    

target stop-hook

在每一个stop(断点)处去执行一些命令,只对代码断点(breakpoint)和内存断点(watchpoint)生效,通过Pause program executionDebug View Hierarchy触发的stop无效

hook住每一个断点,添加相应指令
target stop-hook add -o "指令"

lldb配置文件(.lldbinit)

在用户目录下有个配置文件.lldbinit,没有可新建,在配置文件中可以添加相关指令,这样在每次启动项目后每一处断点都会执行该指令

image指令

ASLR (Address Space Layout Randomization),即地址空间随机布局,动态分配,程序运行才有,是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术

Mach-O文件的文件头会记录二进制的属性标识,有个flag叫做PIE (Position Independent Enable),开启了PIE的二进制文件,在执行时会产生ASLR

通过内存地址查看代码崩溃处
image lookup -a 内存地址

查看类的头文件信息
image lookup -t 类名


如有任何疑问或问题请联系我:fishnewsdream@gmail.com,欢迎交流,共同提高!

Objective-C/Swift技术开发交流群201556264,讨论何种技术并不受限,欢迎各位大牛百家争鸣!

微信公众号OldDriverWeekly,欢迎关注并提出宝贵意见

老司机iOS周报,欢迎关注或订阅

刚刚在线工作室,欢迎关注或提出建设性意见!

刚刚在线论坛, 欢迎踊跃提问或解答!

如有转载,请注明出处,谢谢!

本站总访问量 本文总阅读量