Debug


工欲善其事必先利其器

写代码不可能一蹴而就,总是需要我们反复调试。而Xcode给我提供了非常强大的测试手段,关键在于是否自己能熟练运用到自己平常中。相信好的手段和方式是成功的一半。不说了,直接干货。。


以下皆是在断点状态下的调试输入($0 代表p打印的变量标识,lldb会默认给出顺序$0、$1、$2....)

1.查看控制器层次
po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
2.查看视图层级
po [[UIWindow keyWindow] recursiveDescription]
3.打印当前线程状态
bt
4.打印全部线程状态
bt all
5.打印值
print 或p (会带有变量标示符$)
print $0 + 7 (带美元符号的都可当做参数使用)
6.指定格式打印
p/x $0
x代表格式,x-16进制 ,t-2进制,c-字符,s-字符串
7.改变值
expression x = xx (expression 可以简写为e)
8.声明变量
e int $a = 2 (声明变量,不过变量前必须加美元符号)
9.断点控制
process continue (简写 c 继续执行) thread step-over ( n 单步执行(是不是函数都是下一步,不会跳进去)) thread step-in (s 单步执行(是函数则跳进去,否则下一步)) finish ( 执行到下一个返回语句 (直到一个堆栈帧结束) 然后再次停止)
10.会告诉你当前的行数和源码文件
frame info
11.thread return x (它有一个可选参数(X),在执行时它会把可选参数加载进返回寄存器里,然后立刻执行返回命令,跳出当前栈帧。这意味这函数剩余的部分**不会被执行**。这会给 ARC 的引用计数造成一些问题,或者会使函数内的清理部分失效。但是在函数的开头执行这个命令,是个非常好的隔离这个函数,伪造返回值的方式 。)
12.查看所有断点
breakpoint list(或者 br li)
13.管理断点:
br dis 1 (指定不可用) br del 1 (删除某一断点)
breakpoint set -f ViewController.m -l 21 (指定文件的指定行数创建断点) breakpoint set -F "-[ViewController getNum]” (指定方法创建断点) 简写: b ViewController.m:24
14.查看内存
x/c $0
15.查看响应事件的所有目标
po [$0 allTargets]
16.查看目标的响应方法
po [$0 actionsForTarget:(id)0x7f80faf20b80 forControlEvent:0] (0x7f80faf20b80 为p打印出的内存地址)


参考:
objc.io
此外可以使用facebook发布的Chisel(这是一个python脚本,封装了很多编辑调试命令,可以事半功倍,不幸的是看到文章说Xcode7.2完美运行,Xcode7.3有很多命令不能使用了,作者正在更新...)


看~灰机灰过去了~灰机又灰过来了

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 Bebug调试程序是开发中最常见的问题,对于一些简单有效的调试技巧的了解是很有必要的。这篇文章就列举Debu...
    進无尽阅读 833评论 0赞 2
  • 过去调试 Swift 代码基本靠手写 print 这种非常原始的手法,作为一个有进取心的青年,觉得该好好修炼调试技...
    seedante阅读 11,418评论 10赞 36
  • 转载 与调试器共舞 - LLDB 的华尔兹: https://objccn.io/issue-19-2/ 推荐:i...
    F麦子阅读 3,480评论 0赞 10
  • 1.使用控制台检查程序的状态 2.进行日志记录,并熟练的驾驭NSLog 3.利用对象的生命周期跟踪内存的使用 使用...
    nadou23阅读 2,932评论 0赞 0
  • 与调试器共舞 - LLDB 的华尔兹 nangege 2014/12/19 你是否曾经苦恼于理解你的代码,而去尝试...
    McDan阅读 972评论 0赞 0

友情链接更多精彩内容