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 ...
随机推荐
- H3C PPP基本配置
- Flex AIR使用ADT命令打包 ipa
1. 配置环境变量. 2. 测试adt命令 3. 将ShepherdPhone0815.mobileprovision和 my.p12文件都放入编译好的工程目录下,如下图: 4.切换到上述编译好的目录 ...
- java 反射和泛型-反射来获取泛型信息
通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...
- P1011 圆柱体的表面积
题目描述 输入底面半径 \(r\) 和高 \(h\) ,输出圆柱体的表面积,保留 \(3\) 位小数. 输入格式 输入包含两个实数 \(r,h(1 \le r,h \le 1000)\) 且保证输入的 ...
- 2019-11-17-dotnet-core-使用-GBK-编码
title author date CreateTime categories dotnet core 使用 GBK 编码 lindexi 2019-11-17 16:36:27 +0800 2019 ...
- H3C配置console口密码
方法一: [H3C]user-interface console 0 [H3C-ui-console0]authentication-mode password [H3C-ui-console0]se ...
- C/C++ 获取键盘事件
Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件 #include <conio.h> #include <i ...
- GitHub上传项目到远程库
写文章 GitHub上传项目到远程库 GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...
- layui图片上传之后后台如何修改图片的后缀名以及返回数据给前台
const pathLib = require('path');//引入node.js下的一个path模块的方法,主要处理文件的名字等工作,具体可看文档 const fs = require(''fs ...
- C#获取美团评价信息
闲来无事,朋友需要一家美团店铺的评价消息,索性做个小工具. 一:第一步找到目标网站 地址:https://www.meituan.com/meishi/4460141/ 二:分析网页请求 在目标网页, ...