IOS调试lldb命令常用po
lldb命令常用(备忘)
假如你准备在模拟器里面运行这个,你可以在“(lldb)”提示的后面输入下面的:
(lldb) po $eax
LLDB在xcode4.3或者之后的版本里面是默认的调试器。假如你正在使用老一点版本的xcode的话,你又GDB调试器。他们有一些基本的相同的命令,因此假如你的xcode使用的是“(gdb)”提示,而不是“(lldb)”提示的话,你也能够更随一起做,而没有问题。
“po”命令是“print object”(打印对象)的简写。“$eax”是cup的一个寄存器。在一个异常的情况下,这个寄存器将会包含一个异常对象的指针。注意:$eax只会在模拟器里面工作,假如你在设备上调试,你将需要使用”$r0″寄存器。
例如,假如你输入:
(lldb) po [$eax class]
你将会看像这样的东西:
(id) $2 = 0x01446e84 NSException
这些数字不重要,但是很明显的是你正在处理的NSException对象在这里。
你可以对这个对象调用任何方法。例如:
(lldb) po [$eax name]
这个将会输出这个异常的名字,在这里是NSInvalidArgumentException,并且:
(lldb) po [$eax reason]
这个将会输出错误消息:
(unsigned int) $4 = 114784400 Receiver () has no segue with identifier 'ModalSegue'
注意:当你仅仅使用了“po $eax”,这个命令将会对这个对象调用“description”方法和打印出来,在这个情况下,你也会得到错误的消息。
实用LLDB命令
命令名 用法 说明
| expr | expr 表达式 | 可以在调试时动态执行指定表达式,并将结果打印出来,很有用的命令。 |
| po | po 表达式 | 与expr类似,打印对象,会调用对象description方法。是print-object的简写 |
| print (type) 表达式 | 也是打印命令,需要指定类型。 | |
| bt | bt [all] | 打印调用堆栈,是thread backtrace的简写,加all可打印所有thread的堆栈。 |
| br l | br l | 是breakpoint list的简写 |
| process continue l | process continue | 简写:c |
| thread step-in l | thread step-in l | 简写:s |
| thread step-inst l | thread step-inst l | 简写:si |
| thread step-over l | thread step-over l | 简写:n |
| thread step-over-inst l | thread step-over-inst l | 简写:ni |
| thread step-out l | thread step-out l | 简写:f |
| thread list | thread list | 简写:th l |
内存泄漏隐患提示:
Potential Leak of an object allocated on line ……
数据赋值隐患提示:
The left operand of …… is a garbage value;
对象引用隐患提示:
Reference-Counted object is used after it is released;
对retain、copy、init、release、autorelease等在计数时的使用情况的详细讲解,推荐一下:
http://www.cnblogs.com/andyque/archive/2011/08/08/2131236.html
调用autorelease这意味着,你可以在这个函数里面使用vari,但是,一旦下一次run
loop被调用的时候,它就会被发送release对象。然后引用计数改为0,那么内存也就被释放掉了。(关于autorelease到底是怎么工作的,我的理解是:每一个线程都有一个autoreleasePool的栈,里面放了很多autoreleasePool对象。当你向一个对象发送autorelease消息之后,就会把该对象加到当前栈顶的autoreleasePool中去。当当前runLoop结束的时候,就会把这个pool销毁,同时对它里面的所有的autorelease对象发送release消息。而autoreleasePool是在当前runLoop开始的时候创建的,并压入栈顶。那么什么是一个runLoop呢?一个UI事件,Timer
call, delegate call, 都会是一个新的Runloop。)
当程序崩溃的时候怎么办,有如下两部分(英文版的):
http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1
(中文的part-1)http://article.ityran.com/archives/1006
http://www.raywenderlich.com/10505/my-app-crashed-now-what-part-2
(中文的part-2)http://article.ityran.com/archives/1143
内存使用详细介绍:
http://www.cocoachina.com/bbs/simple/?t94017.html
苹果官方的Mac OS X Debugging Magic,详细讲述了最为一个高级苹果程序员应该具备的调试技巧
http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html
IOS调试lldb命令常用po的更多相关文章
- IOS调试lldb命令常用,po,
lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面 ...
- 调试lldb命令常用
0.关于iOS的UI显示调试的三方控件 Reveal “po”命令是“print object”(打印对象)的简写.“$eax”是cup的一个寄存器.在一个异常的情况下,这个寄存器将会包含一个异常对象 ...
- iOS调试-LLDB学习总结
from:http://www.jianshu.com/p/d6a0a5e39b0e LLDB阐述 LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...
- iOS调试 LLDB
LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件. 常用调试命令: 1.print命 ...
- ios 用LLDB查看模拟器文件路径以及一些常用的命令
我看网络上有好多有关lldb调试命令的介绍,我都看了一遍,都没有这个方法,所以我在这里补充出来,帮助需要的人. 另外附上一些 实用LLDB命令 我们可以使用e命令定义变量 (lldb) e NSStr ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- iOS开发之Xcode常用调试(Debug)技巧总结
一.Xcode调试技巧之:NSLog 上面也提到了,在我们日常的开发过程中最常见的Debug方式就是打Log.而在OC语言中,打Log是采用NSLog方法.但是NSLog效率低下,具体原因可以看这篇博 ...
- iOS调试
iOS高效调试 写代码难免出现bug.储备些调试技能绝对能够提高你的工作效率,让bug无所遁形.下面就和大家分享一些我在工作中常用的iOS调试小技能. 1. 打印 最简单,基础的调试方法就是打印日志了 ...
- iOS 调试心得
修复 bug 占用我们日常开发的大部分时间,熟练的使用调试工具可以给我们节约大部分的时间. LLDB 的常用命令 expression expresion 是一个非常常用的命令,我们可以通过这个命令来 ...
随机推荐
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- ie浏览器下input和select的上下居中问题!!!!
在Google浏览器下的input和select标签里面的文字是根据它的高度自适应上下居中的,而ie浏览器下的input和select里面的文字就不会根据高度自适应上下居中,跟大家分享一下我的解决方法 ...
- tabswitch
<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...
- myeclipse跟eclipse中使用github做版本控制工具
今天早上花了一上午的时间,了解了在myeclipse跟eclipse中使用github. 好吧 说说怎么做的,让大伙少走一点路,我就简单描述下,需要软件的私信我 第一:下载git 第二:靠谱.但是pu ...
- IIS 配置好了,为什么网站打开一片空白?
方法如下: 进入:控制面板 - 卸载程序 - 打开或关闭Windows功能 如果访问任何不存在页面或页面出错时空白: Internet 信息服务 - 万维网服务 - 常见 HTTP 功能 - HTTP ...
- Excel:您尝试打开的文件的格式与文件扩展名指定的格式不一致
报错信息: 打开文件时提示"您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致.打开文件前请验证文件没有损坏且来源可信.是否立即打开该文件?",卸载Office 20 ...
- JavaScript--Date函数
1. Date函数 var now = new Date(); 获取当前日期对象 now对象->Date.prototype->Object.prototype 将一个字符串转换为Date ...
- Java中long和double的原子性
Java中long和double的原子性 java中基本类型中,long和double的长度都是8个字节,32位(4字节)处理器对其读写操作无法一次完成,那么,JVM,long和double是原子性的 ...
- 重新开始学习javase_控制程序流程
@学习thinking in java 二.控制程序流程 负数使用 Java 运算符:运算符以一个或多个自变量为基础,可生成一个新值.自变量采用与原始方法调用不同的一种形式,但效果是相同的.根据以前写 ...
- hibernate_validator_09
创建自己的约束规则 尽管Bean Validation API定义了一大堆标准的约束条件, 但是肯定还是有这些约束不能满足我们需求的时候, 在这种情况下, 你可以根据你的特定的校验需求来创建自己的约束 ...