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 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

时间: 2024-10-15 11:47:04

IOS调试lldb命令常用po的相关文章

IOS调试lldb命令常用,po,

lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在“(lldb)”提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在使用老一点版本的xcode的话,你又GDB调试器.他们有一些基本的相同的命令,因此假如你的xcode使用的是“(gdb)”提示,而不是“(lldb)”提示的话,你也能够更随一起做,而没有问题. “po”命令是“print object”(打印对象)的简写.“$eax”是cup的一个寄存器.在一

iOS调试-LLDB

LLDB是LLVM下的调试器.Xcode从4.0开始编译器开始改用LLVM,相应的调试器也从gdb改为LLDB.而从 Xcode5.0开始所有工程也被自动设置为使用LLDB. 记录一些LLDB中常用的命令,举个简单的例子,这段代码在运行的时候程序会崩溃 1.查看地址的信息,可以找出出错代码的行数,怀疑是0x00001b91这个内存地址发生错误 image lookup --address 0x00001b91 2.输出视图的继承关系 po [[self view] recursiveDescri

IOS调试lldb常用命令

LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在使用老一点版本的xcode的话,你又GDB调试器.他们有一些基本的相同的命 令,因此假如你的xcode使用的是“(gdb)”提示,而不是“(lldb)”提示的话,你也能够更随一起做,而没有问题. “po”命令是“print object”(打印对象)的简写.“$eax”是cup的一个寄存器.在一个异常的情况下,这个寄存器将会包含一个异常对象的指针.注意:$eax只会在模拟器里面工作,假如你在设备上调试,你将需要使用”$r0″寄

ios 用LLDB查看模拟器文件路径以及一些常用的命令

我看网络上有好多有关lldb调试命令的介绍,我都看了一遍,都没有这个方法,所以我在这里补充出来,帮助需要的人. 另外附上一些 实用LLDB命令 我们可以使用e命令定义变量 (lldb) e NSString *$str = @"http://www.cnblogs.com/JASON-SONG/" (lldb) po $str http://www.cnblogs.com/JASON-SONG/ (lldb) e int $count = 10 (lldb) p $count (int

iOS开发之Xcode常用调试技巧总结

两种最常见最普通的方法: 1.NSLog,最简单的方法,查看变结 中是否有值,有什么值,是不是自己需要的值,然后找到bug. 2.po命令,在程序进入断点处,在控制台中输入po 变量名,也可以像NSLog一样查看变量是否有值,有什么值. 今天主要介绍点高大上的方法. 一.Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 这个时候就进入了断点模式,可以查看issue面板,注意选择右边Runtime: 有很多叹号说明就有问题了.看内存中object的名字,有一

ANT编译打包&WIFI调试& adb shell常用命令

ANT编译打包 1:用ADT工具自带的打包:    1:切换到项目目录: 运行,android update project -p . android update project -p ./ --library ../com.example.plugin1.ifs 2:刷新:多了两个目录, 3:local.properties配置: sdk.dir=E:\\samy\\adt-huixin_x86-20140321\\sdk  key.store=./keystore/**** key.sto

关于在adb调试过程中常用的用法及adb命令

本篇主要讲解一下几种关于我们在调试过程中常用的几个adb命令及用法,adb连接的具体过程这里就不再多讲 关于怎么通过adb命令连接手机进行调试请参考 如何通过PC端连接Android设备进行adb调试 首先必须确保你正确配置了AndroidSDK(不然这里是直接打不开的,需要进入到SDK-platform-tools路径下进行adb命令),话不多说,看图 1) adb devices ( 用于查看当前adb连接的设备有哪些,这里目前是无) 2) adb connect IP地址 (用于连接And

GDB调试技巧:常用命令

一 写在开头 1.1 本文内容 总结GDB调试的一些常用命令.不定期更新. 二 常用命令 GDB和VIM一样,功能异常强大,但要熟练掌握它却很需要费时间.不过,尽管它们两个的命令多如牛毛,但只要掌握最常用的那几个命令就可以快速上手.下面的列表总结了GDB最常用的几个命令. 简写 全称 备注 l list 显示指定行号或者指定函数附近的源代码 b break 在指定行号或者指定函数开头处设置断点.如b main r run 运行程序,直到程序结束或者遇到断点而停下 c continue 在程序中断

iOS调试

iOS高效调试 写代码难免出现bug.储备些调试技能绝对能够提高你的工作效率,让bug无所遁形.下面就和大家分享一些我在工作中常用的iOS调试小技能. 1. 打印 最简单,基础的调试方法就是打印日志了.贴出封装好的日志打印代码: #ifdef DEBUG #define DLog(fmt, ...) NSLog((@"<%s : %d> %s  " fmt), [[[NSString stringWithUTF8String:__FILE__] lastPathCompon