有一次因为封装一个控件,UI能正常显示就是不能点击,一点击就崩溃,而且异常断点也无法捕捉,把Xcode的僵尸对象打开,每次崩溃就打印一个地址,最后就必须根据地址寻找对象,可以使用frame variable命令检查帧参数和本地变量。当时用此命令打印出self的地址和崩溃地址一样,一下就缩小了检查范围,最后是因为按钮添加方法时target的参数把自己当做属性传过去了,其实只要把它自己传过去就行。

现在就说一说常用命令:

p 用于输出基本类型,

po 用于输出 Objective-C 对象,

print  与p命令相似   他们的具体打印信息如下:

(lldb) print mouthLable
(UILabel *) $3 = 0x09c77070
(lldb) p mouthLable
(UILabel *) $4 = 0x09c77070
(lldb) po mouthLable
<UILabel: 0x9c77070; frame = (0 0; 50 40); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x52eec90>>

  

上图显示了在控制台的左边有一个可以直接选择打印的对象,打印出来的结果如下:

Printing description of mouthLable:
<UILabel: 0x9c77070; frame = (0 0; 50 40); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x52eec90>>

  这些都是常用的输出方法,如果用这些输出方法输出带有宏定义的则输出不了,必须把宏定义的内容还原才行,用PO还可以输出方法,可以使输出的值强转。如下:

(lldb) po bigLable
<UILabel: 0xb3bcf70; frame = (0 0; 100 40); userInteractionEnabled = NO; layer = <_UILabelLayer: 0xb3bd050>> (lldb) po [bigLable subviews]
<__NSArrayM 0xb3bf710>(
<UILabel: 0xb3beaa0; frame = (0 0; 50 40); text = '03月'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0xb3acc90>>
) (lldb) po (int)[[bigLable subviews] count]
1 (lldb)

  线程状态

thread list:显示线程数

(lldb) thread list
Process 4198 stopped
* thread #1: tid = 0xfc64c, 0x00800b42 iSchool`-[YXHomeTViewController viewDidLoad](self=0x0b3b92d0, _cmd="viewDidLoad") + 1686 at YXHomeTViewController.m:138, queue = 'com.apple.main-thread', stop reason = breakpoint 5.1
thread #5: tid = 0xfc690, 0x37d70224 libsystem_kernel.dylib`kevent64 + 24, queue = 'com.apple.libdispatch-manager'
thread #6: tid = 0xfc694, 0x37d84190 libsystem_kernel.dylib`__semwait_signal + 24, name = 'gputools.smt_poll.0x22485c0'
thread #11: tid = 0xfc6c7, 0x37d70474 libsystem_kernel.dylib`mach_msg_trap + 20, name = 'AFNetworking'
thread #12: tid = 0xfc6cd, 0x37d70474 libsystem_kernel.dylib`mach_msg_trap + 20, name = 'com.apple.NSURLConnectionLoader'
thread #15: tid = 0xfc6d0, 0x37d84080 libsystem_kernel.dylib`__select + 20, name = 'com.apple.CFSocket.private'
thread #30: tid = 0xfc777, 0x37d70474 libsystem_kernel.dylib`mach_msg_trap + 20, name = 'EMGCDAsyncSocket-CFStream'
thread #46: tid = 0xfdaf8, 0x37d849c0 libsystem_kernel.dylib`__workq_kernreturn + 8

  星号(*)表示thread #1为当前线程。为了获取线程的跟踪栈,可以使用以下命令:

(lldb) thread backtrace
* thread #1: tid = 0xfc64c, 0x00800b42 iSchool`-[YXHomeTViewController viewDidLoad](self=0x0b3b92d0, _cmd="viewDidLoad") + 1686 at YXHomeTViewController.m:138, queue = 'com.apple.main-thread', stop reason = breakpoint 5.1
frame #0: 0x00800b42 iSchool`-[YXHomeTViewController viewDidLoad](self=0x0b3b92d0, _cmd="viewDidLoad") + 1686 at YXHomeTViewController.m:138
frame #1: 0x2c6c59ae UIKit`-[UIViewController loadViewIfRequired] + 602
frame #2: 0x2c6c571c UIKit`-[UIViewController view] + 24
* frame #3: 0x000dc80a iSchool`-[BaseViewControllerT showLoading](self=0x0b3b92d0, _cmd="showLoading") + 38 at BaseViewControllerT.m:72
frame #4: 0x007ff70c iSchool`-[YXHomeTViewController TestHttp](self=0x0b3b92d0, _cmd="TestHttp") + 60 at YXHomeTViewController.m:56
frame #5: 0x007ff6b4 iSchool`-[YXHomeTViewController init](self=0x0b3b92d0, _cmd="init") + 128 at YXHomeTViewController.m:49
frame #6: 0x00747b36 iSchool`-[MobileCampusController didselCellZhengshi:](self=0x022e7fd0, _cmd="didselCellZhengshi:", indexPath=0x09ca75b0) + 1014 at MobileCampusController.m:304

  如果要查看所有线程调用栈则可以使用

thread backtrace all

检查帧参数和本地变量的最简便的方式是使用frame variable命令
(lldb) frame variable
(YXHomeTViewController *) self = 0x0b3b92d0
(SEL) _cmd = "showLoading"

  可以查看相关对象和地址。

image list可以用它来查看工程中使用的库。

(lldb) image list
[ 0] B4BF0C10-3B1A-3FE5-9CCB-E65743E82B77 0x00004000 /Users/traceboard/Library/Developer/Xcode/DerivedData/iSchool-fujsfonczhafjxcmkgfofjbzpfwk/Build/Products/Debug-iphoneos/iSchool.app/iSchool
/Users/traceboard/Library/Developer/Xcode/DerivedData/iSchool-fujsfonczhafjxcmkgfofjbzpfwk/Build/Products/Debug-iphoneos/iSchool.app.dSYM/Contents/Resources/DWARF/iSchool
[ 1] 6CF411B5-99E9-3791-B3F4-0CED325786DD 0x1fe0b000 /Users/traceboard/Library/Developer/Xcode/iOS DeviceSupport/8.4.1 (12H321)/Symbols/usr/lib/dyld
[ 2] 8574AF16-8793-3D1C-AEE7-FC2A51F04E4F 0x371ad000 /Users/traceboard/Library/Developer/Xcode/iOS DeviceSupport/8.4.1 (12H321)/Symbols/usr/lib/libicucore.A.dylib
[ 3] 2E1A648A-1C0A-3A65-9BAF-221C2719C5C4 0x28d04000 /Users/traceboard/Library/Developer/Xcode/iOS DeviceSupport/8.4.1 (12H321)/Symbols/System/Library/Frameworks/CoreBluetooth.framework/CoreBluetooth
[ 4] E9633AB3-EDDC-3032-8604-7203C343F2B8 0x296ff000 /Users/traceboard/Library/Developer/Xcode/iOS DeviceSupport/8.4.1 (12H321)/Symbols/System/Library/Frameworks/CoreLocation.framework/CoreLocation
[ 5] 92F64E66-D354-3D04-BAED-AE41A6291C31 0x37a17000 /Users/traceboard/Library/Developer/Xcode/iOS DeviceSupport/8.4.1 (12H321)/Symbols/usr/lib/libsqlite3.dylib
[ 6] 65E6D41B-25C1-306E-BE96-DF64D33C03AB 0x37c22000 /Users/traceboard/Library/Developer/Xcode/iOS DeviceSupport/8.4.1 (12H321)/Symbols/usr/lib/libz.1.dylib

  

还有可以设置断点:breakpoint set等命令,因为设置断点可以用图形界面更快更直观的设置,还有可以设置程序运行的步骤thread step等命令,都可以使用图形界面进行控制,而用的不多,个人感觉最有用的要属寻找对象地址,打印对象信息。

iOS_SN_LLDB常用命令的更多相关文章

  1. Linux 常用命令(持续补充)

    常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...

  2. LVM基本介绍与常用命令

    一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...

  3. Linux学习笔记(一):常用命令

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  4. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  5. 【原】npm 常用命令详解

    今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...

  6. npm常用命令

    npm常用命令 环境:win7 npm 是什么 NPM(node package manager),通常称为node包管理器.顾名思义,它的主要功能就是管理node包,包括:安装.卸载.更新.查看.搜 ...

  7. Git 常用命令

    一.初始環境配置 git config --global user.name "John Doe"git config --global user.email johndoe@ex ...

  8. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  9. Linux常用命令(一)

    Linux常用命令 1. pwd查看当前路径(Print Working Directory)    [root@CentOS ~]# pwd/root 2. cd .. 返回上一级 .. 表示上一级 ...

随机推荐

  1. haslayout和BFC

    感谢CSS涛的分享,参考文章: (1)haslayout:http://aibusy.com/blog/?p=53 (2)BFC 神奇背后的原理:http://aibusy.com/blog/?p=8 ...

  2. iOS摄像头和相册-UIImagePickerController-浅析(转)

    iOS摄像头和相册-UIImagePickerController-浅析(转) 转自: http://blog.sina.com.cn/s/blog_7b9d64af0101cfd9.html 在一些 ...

  3. Android 常用对话框Dialog封装

    Android 6种 常用对话框Dialog封装 包括: 消息对话框.警示(含确认.取消)对话框.单选对话框. 复选对话框.列表对话框.自定义视图(含确认.取消)对话框 分别如下图所示:       ...

  4. Altium Designer 09 (Protel)总线使用方法(解决导入PCB无网络标号问题)

    弄了两天的Protel总线问题终于解决了,一开始顶层总线连接好后,导入PCB没有网络标号,也就是两个子图信号没连上.现在将正确的连接和设置方法公布如下: 1.首先画好子图的总线,如下图所示.注意:中括 ...

  5. owncloud乱码问题

    没有人回答那我就献丑了,废话有点多,请跳着看. 先说结论:最后我选择了 Seafile 我去年之前用box同步个人文件,前几个月的时候吧,发现box不能上传几百M的文件,我才知道之前为什么会丢文件了… ...

  6. 【HDOJ】1513 Palindrome

    DP,MLE后改为滚动数组AC. #include <cstdio> #include <cstring> #include <cstdlib> #define M ...

  7. 2014-07-25 改进自定义菜单与使用SVN进行协同开发

    今天是在吾索实习的第13天.今天没有做过多的代码设计,只进行了一些代码的分析与进一步优化.其中,发现创建自定义菜单的关键代码书写可分为两部分: JSON格式的字符串在.net中的语法书写: strin ...

  8. linux0.12 学习总序(不断更新状态中)

    最近有空闲时间,想静下心来学点东西.一直对kernel有兴趣,又苦于无从下手,就拿linux0.12练手.尝试了解并熟悉kernel各模块工作原理. 接下来的博客主要用来记录自己所遇到的问题和解决的方 ...

  9. zabbix linux被监控端部署

    测试使用agentd监听获取数据. 服务端的安装可以查看http://blog.chinaunix.net/space.php?uid=25266990&do=blog&id=3380 ...

  10. cocos 的CCScheduler模块

    scheduleSelector函数->查找m_pHashForTimers是否有存储回调的Obj类实例,否,创建新条目tHashTimerEntry,指向回调类实例,tHashTimerEnt ...