lldb调试器知多少
/Library/Developer/CommandLineTools/usr/bin/lldb
Xcode中也自带来了调试器lldb:
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb
192:~ zhoufei$ ps aux | grep /Applications zhoufei 1496 0.8 4.2 6501004 348924 ?? S 10:14下午 0:35.31 /Applications/YoudaoNote.app/Contents/MacOS/YoudaoNote
zhoufei 1255 0.0 2.0 8894360 168828 ?? S 10:01下午 0:43.20 /Applications/Firefox.app/Contents/MacOS/firefox
2.开启调试一个静止的app程序
//通过lldb调试器打开静态程序
192:bin zhoufei$ lldb firefox //或者 //通过lldb调试器打开 带参数的 静态程序
192:bin zhoufei$ lldb firefox 11 22
3.将lldb调试器附加到一个正在运行的app程序
//1.先打开lldb调试器
192:bin zhoufei$ lldb //2.将调试器附加到要调试的目标可执行文件上
(lldb) process attach --name firefox
Process 1255 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x00007fff7570920a libsystem_kernel.dylib`mach_msg_trap + 10
libsystem_kernel.dylib`mach_msg_trap:
-> 0x7fff7570920a <+10>: retq
0x7fff7570920b <+11>: nop libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x7fff7570920c <+0>: movq %rcx, %r10
0x7fff7570920f <+3>: movl $0x1000020, %eax ; imm = 0x1000020
Target 0: (firefox) stopped. Executable module set to "/Applications/Firefox.app/Contents/MacOS/firefox".
Architecture set to: x86_64h-apple-macosx.
(lldb) thread list
4.根据调试命令进行调试
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
1.打印命令
//同expression
p
//打印对象
po
2.项目中mach-o文件查询
//查询 类型UITableViewCell 在mach-o中的定义信息,并打印出最佳匹配
image lookup -t UITableViewCell //查询 崩溃内存地址0x000000010e041b62 在mach-o中的定义信息,并打印出最佳匹配
//4 WYDoctorConsultModule_Example 0x000000010e041b62 -[WYFastConsultViewController //emptyViewModelDidRefreshOrderList:] + 162
image lookup -a 0x000000010e041b62 //查询 方法名或者符号名为emptyViewModelDidRefreshOrderList: 在mach-o中的定义信息,并打印出最佳匹配
image lookup -n emptyModelDidRefreshOrderList: //查询 app中所有使用的mach-o信息,并打印出最佳匹配
image list
//对变量self->_pageNo进行监控
watchpoint set variable self->_pageNo //对内存地址&(self->_pageNo)进行监控
watchpoint set expression &(self->_pageNo) //查询所有的内存监控
watchpoint list //删除序号为:1 的内存监控
watchpoint delete 1 //额外命令追加
//当序号:2 断点触发时,执行追加的命令
watchpoint command add 2
//删除序号:2的命令追加
watchpoint command delete 2
//查询所有追加命令的列表
watchpoint command list
4.为项目源码外的第三方静态库,动态库添加断点
breakpoint set -a 函数地址
breakpoint set -n 函数名称
//为符合正则表达式函数全部添加断点
breakpoint set -r 任意包含此字符串的函数名称 //breakpoint set -s 动态库名称 -n 动态库方法名
breakpoint set -s dyld -n load
//打印当前栈帧frame的堆栈信息
thread backtrace
bt命令同上 //函数提前返回
thread return [返回值] //当前栈帧的所有局部变量
frame variable //源码级 代码单步执行,下一步
thread step-over, next, n
//指令级 汇编单步执行,下一步
thread step-inst-over, nexti, ni
expression (就是 p/print/call)
expression -o(就是 po) //打印对象内存地址
expression -o -- 0x1111
brew install chisel
command script import /usr/local/opt/chisel/libexec/fblldb.py
后保存, 重启Xcode或者重新打开终端,让修改生效。
最后
平时的iOS开发中,使用的OC或者Swift是编译性语言,每次修改都有重新编译后才能看到结果,如果合理使用lldb调试器,将会大大提高开发效率。
lldb调试器知多少的更多相关文章
- iOS LLDB调试器
随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器.它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.LLDB为Xcode提供了底层调试环 ...
- 使用Python脚本强化LLDB调试器
LLDB是Xcode自带的调试器,作为一个iOS应用开发程序员,平时我在开发应用时会使用LLDB来调试代码.在逆向应用时,也会用到LLDB来跟踪应用的执行过程. LLDB还内置了一个Python解析器 ...
- 学习笔记之--认识Xcode中的重要成员:lldb调试器
之前对lldb调试器了解比较少,平时主要用来打印日志和暂定时用鼠标查看属性数据以及使用p po一些简单的命令语句. 今天看了一些关于lldb的文章,顿时觉得之前对它了解太少了,原来它还有那么多的功能. ...
- iOS LLDB调试器和断点调试
技巧一:运行时修改变量的值 你以前怎么验证是不是某个变量的值导致整段程序不能正常工作?修改代码中的变量的值,然后cmd+r重新启动app?现在你不需要这么做了,只需要设置一个断点,当程序在这进入调试模 ...
- iOS - 浅谈LLDB调试器
摘要 LLDB是Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.平时用Xcode运行程序,实际走的都是LLDB.熟练使用LLDB,可以让你debug事半功 ...
- LLDB调试器
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNu ...
- iOS之LLDB调试器
LLDB被定位为下一代的高性能调试器,默认内置于Xcode IDE内, 支持在PC.iOS设备以及模拟器上调试C.Objective-C和C++. 关于LLDB的官方介绍:LLDB 常用命令: 1. ...
- Ubuntu18.04上使用LLDB调试Chromium Android C++代码。
###动机###Chromium Android源代码庞大且复杂.在调试器LLDB下能帮助我们更好的理解代码流程.介绍使用LLDB调试器调试android上chromium的C++代码. [1] 编译 ...
- 在lldb调试中调用c++函数
在lldb调试时,调用oc对象的方法不足为奇,因为msgSend是有原型导出的,oc对象的方法都运行期绑定的,绑定信息都在objc_class中.只要在调试中[receiver sel]之类,lldb ...
随机推荐
- Server,Servlet,ServletConfig,ServletContext,Session,Request,Response
Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...
- Canvas动画:地球绕着太阳转
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 2018.11.9浪在ACM集训队第四次测试赛
2018.11.9浪在ACM集训队第四次测试赛 整理人:朱远迪 A 生活大爆炸版 石头剪刀布 参考博客:[1] 刘凯 B 联合权值 参考博客: [1]田玉康 ...
- 实现页面查看xml或json数据类似控制台效果
在前端查看xml或者json数据时,实现在类似与控制台中console的效果. 配合Ant Design的Collapse折叠面板进行展示. Collapse组件的地址:https://ant.des ...
- 【codeforces 750C】New Year and Rating
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Curator源码阅读 - ConnectionState的管理与监听
看看Curator框架 为实现对 连接状态ConnectionState的监听,都是怎么构造框架的.后面我们也可以应用到业务的各种监听中. Curator2.13实现 接口 Listener List ...
- Codeforces Round #587 C. White Sheet(思维+计算几何)
传送门 •题意 先给一个白矩阵,再两个黑矩阵 如果两个黑矩阵能把白矩阵包含,则输出NO 否则输出YES •思路 计算几何题还是思维题呢? 想起了上初中高中做几何求面积的题 这个就类似于那样 包含的话分 ...
- 精通CSS:高级WEB解决方案
选择器:高级选择器:属性选择器:[] ,例如:a[href=”#”] {};选择器的优先级:!important为最高优先级,其次优先级次序规则:a,b,c,d ,a代表行内样式,b代表ID选择器,c ...
- 经典问题(c++/python)素数、杨辉三角(金字塔型)、统计单词数、简单计算器、密码安全程度、凯撒密码加密、汉诺塔 (python课设实验实例)-- biaobiao88
[编写程序,输人一个大于2的自然数,然后输出小于该数字的所有素数组成的列表.]所谓素数,是指除了1和自身之外没有其他因数的自然数,最小的素数是2,后面依次是3.5.7.11.13... c++代码: ...
- poj - 3585(二次扫描与换根法)
周末牛客挂了个更难的,这个简单一些 #include<iostream> #include<cstring> #include<cstdio> #include&l ...