`

Xcode LLDB Debug教程

    博客分类:
  • ios
 
阅读更多

http://my.oschina.net/notting/blog/115294

在xcode中打开一个app,在想要break的行号上单击,即可生成一个深色的箭头标识--断点。如下图,在viewDidLoad:中设置了断点。

运行app,等待。。。就可以看到xcode在断点处进入调试模式,现在让我们把视线移到xcode右下角的控制台,有木有看到(lldb)这样一行,鼠标移到此行,输入

1 po [self view]

回车,看看控制台上是不是多了一些view的信息,如下图:

po(print object)是LLDB的一个命令,其主要功能是输出objective-c中对象(objects)的信息,与之相似的另外一个命令是 p(print),其主要功能是输出原生类型(boolean、integer、float、etc)的信息。

控制台输入

p (int)[[[self view] subviews] count]

结果如下

(int) $2 = 2

注意这个使用了类型转换告知调试器应该如何处理返回值。

技巧一:运行时修改变量的值

你以前怎么验证是不是某个变量的值导致整段程序不能正常工作?修改代码中的变量的值,然后cmd+r重新启动app?现在你不需要这么做了,只需要设置一个断点,当程序在这进入调试模式后,使用expr命令即可在运行时修改变量的值。

假如有一个loginWithUsername:方法,需要两个参数:username,password。

首先设置好断点,如下图所示:

运行app,进入断点模式后,在(lldb)后输入

 

1 expr username = @"username"
2 expr password = @"badpassword"

控制台会返回以下信息

 

 

1 (NSString *) $0 = 0x3d3504c4 @"username"
2 (NSString *) $1 = 0x1d18ef60 @"badpassword"

现在跳出断点,执行断点之后的两条输出语句,控制台会有以下输出

 

 

1 (0x1c59aae0) A line for the breakpoint
2 (0x1c59aae0) Username and Password after: username:badpassword

看到看吧,我们在运行时修改了变量的值,事情还可以变的更简单一些,我们可以编辑断点,让它自动填充需要的修改的变量的值,并且可以选择在此断点处不进入断点模式,仅仅修改指定变量的值,然后自动执行后续代码。

 

右击断点选择“Edit Breakpoint...”(或者按住cmd+option,单击断点),然后如下图所示设置断点


注意选中了最后一行(“Automatically continue after evaluating”)的选择框,这就保证运行到这个断点的时,填充变量的值,然后继续运行,并不在此处断点进入调试模式。

运行app,你会得到和上述手动设置变量的值一样的输出。

接下来单击断点,使其处于禁用状态,现在箭头的颜色应该是浅蓝色的,重新运行app,你会发现username和password的值没有在运行时被改变了。

技巧二:设置断点触发条件

断点的另外一个重要作用,是可以设置触发断点生效的条件,这样我们就可以在运行时针对特定的数据进行分析,观察app是否运行在正确的轨道上。如下图:

上述截图可以看到如下语句

 

1 (BOOL)[(NSString*)[item valueForKey:@"ID"] isEqualToString:@"93306"]

通过这行语句,我们告诉编译器:当item中ID等于93306时,此断点生效,进入断点调试模式。

 

技巧三:格式化输出数据

如果你厌倦了代码里无穷无尽的NSLog,幸运的是我们可以在编辑断点使其输出格式化字符串就像平常编码时一样。不过有一点需要注意,平常编码时可能会使用NSString‘s stringWithFormat:输出格式化字符串,不过这个方法貌似在断点中木有效果,你需要使用alloc/init形式的方法,如下:

 

1 po [[NSString alloc] initWithFormat:@"Item index is: %d", index]

运行app,就能在控制台看到想要的输出啦!

简单!强大!这就是LLDB给你的选择,从此代码里可以不用再有NSLog满天飞的情况了,代码变得更干净了,心情变得更愉悦了!

LLDB还有很多强大的地方,本教程只不过揭开了它的面纱,即便如此,仍让我们沉醉不已。

如此你有让xcode中debug变的更轻松加简单的方法,请在评论中尽情的分享!

分享到:
评论

相关推荐

    xcode编译webkit资料

    - 使用Xcode的内置调试器LLDB进行源代码级别的调试,理解如何设置断点、查看变量、调用堆栈等。 - 利用WebKit的Web Inspector进行网页元素的检查和JavaScript的实时调试。 7. **性能优化**: - 分析编译时间和...

    Xcode 15.4 真机调试

    3. **断点与调试器**:Xcode支持LLDB调试器,可以在代码中设置断点。当程序执行到断点时,会暂停,允许查看变量值、步进代码、检查调用堆栈等。此外,Xcode的变量观察窗口、控制台输出和线程视图也是调试过程中的...

    LLDB调试提交

    在Xcode中,你可以选择"Product"菜单下的"Run"或"Debug"选项来启动带有LLDB的调试会话。在代码中设置断点,当程序执行到断点位置时,LLDB会暂停程序,这时你可以查看并改变变量值,单步执行代码等。 三、LLDB命令...

    LLDB 调适命令1

    在iOS开发中,LLDB是Xcode集成开发环境的标准调试工具,开发者可以利用其强大的特性进行高效的问题定位和代码调试。通过熟悉和掌握LLDB的命令,开发者可以更好地理解和控制程序的运行状态,从而提高开发效率和产品...

    iOS逆向之lldb常用操作指令.pdf

    在Xcode中打开目标应用程序的项目,然后通过Product菜单下的Scheme选择Debug模式来启动应用。当应用运行在调试模式时,lldb的调试控制台会自动打开,此时可以输入各种调试指令进行操作。 一些常用的lldb指令包括: ...

    android studio cmak+lldb(for mac)

    `lldb`全称为“LLVM Debugger”,是苹果公司推出的开源调试工具,它是Xcode的默认调试器,也适用于命令行环境。在Android Studio中,你可以使用LLDB调试运行在Android设备或模拟器上的原生代码。解压后的`lldb`...

    ios13.3 调试包

    - 当应用在设备上运行时,可以在Xcode的Debug Area查看日志输出,设置断点并查看变量值。 - LLDB支持命令行操作,可以在控制台输入LLDB命令进行更高级的调试。 4. **Instruments调试** - 通过Xcode的“Product”...

    code-debug:VSCode的本机调试

    按ctrl-p(在OS X上为cmd + p), ext install webfreak.debug在Visual Studio代码中运行ext install webfreak.debug ,然后安装GDB / LLDB。 有关如何设置的详细信息,请参见Usage 。 用法 或者,如果项目设置中已...

    iOS13.7 真机调试包.zip

    Xcode 11.7是其稳定版本之一,支持Swift和Objective-C编程语言,并包含了一系列工具,如Interface Builder(用于设计用户界面)、Instruments(性能分析工具)以及LLDB(调试器)等。 iOS 13.7是苹果为iPhone和iPad...

    Debug.Hacks中文版_深入调试的技术和工具

    - **LLDB**:由Apple开发,作为Xcode的一部分,也支持独立使用,适用于Objective-C、Swift等语言。 - **Valgrind**:主要用于内存错误检测,包括内存泄漏和非法内存访问。 #### 3. **性能分析工具** - **...

    iOS Xcode汇编模式切换的方法介绍

    LLDB命令行是Xcode中的一种调试工具,我们可以使用以下命令来控制调试过程: 1. expr 变量|表达式:显示变量或者表达式的值。 2. expr -f h -- 变量|表达式:以16进制格式显示变量或表达式的内容。 3. expr -f b --...

    swift-ios-deploy从命令行安装和调试iPhone应用程序而不使用Xcode

    ios-deploy --debug --bundle MyApp.app ``` 这将在设备上启动应用,并在本地终端打开LLDB会话,允许你输入调试命令。 **五、配置参数** `ios-deploy` 提供了一些额外的选项来控制部署行为,例如指定设备ID、强制...

    objc4_debug:有可编译苹果官方原始代码objc!现在有objc4嵌入二进制文件,以及libmalloc-166.200.60等可编译版本,大家可以自由LLDB调试!

    objc_debug可编译苹果官方源码objc!可编译源码,LLDB调试,方便大家探索学习! :warning: 2021年1月5号更新:在苹果系统bigSur ( macOS 11 ) xcode 12.2源码编译报错的问题解决!大家及时更新源码objc4-818.2 :...

    iOS开发常用组件库、性能监控、crash 防护、debug调试等.zip

    - LLDB:Apple推荐的调试器,支持命令行操作和Xcode内调试。 - Print Statements:在代码中添加NSLog或Swift的print语句,用于输出变量状态和流程控制。 - View Hierarchy Debugger:Xcode中的视图层级调试工具,...

    juce-toys:JUCE模块中的调试实用程序,以及NatVis和LLDB自定义项

    请参阅juce_lldb_xcode.py。JCF_DEBUG:JUCE调试模块juce模块jcf_debug中有五个开发调试实用程序。 我一直在用这些。 他们是: ComponentDebugger-将其中之一附加到组件,并在单独的窗口中以树的形式获取其所有子级...

    ios13.3调试包

    此外,调试包中的LLDB(Low Level Debugger)是Xcode的核心调试器,它允许开发者在运行时检查代码状态,设置断点,查看变量值,甚至修改内存内容,以便快速定位和修复代码错误。同时,Interface Builder则提供了可视...

    Advanced Apple Debugging&Reverse; Engineering v1.0

    书的标签“Debug iOS LLDB”强调了几个关键点:首先,“Debug”表明了这是一本关于调试的书籍;其次,“iOS”指明了调试的平台限定在苹果的操作系统上;最后,“LLDB”指的是iOS调试过程中可能会使用到的调试器。...

    iphone ipad 真机调试

    3. 设置调试器:在Xcode中,你可以选择使用LLDB或其他调试器进行代码调试。在"Product"菜单中点击"Debug"或"Profile"启动调试会话。 4. 运行与调试:点击Xcode中的"Run"按钮,应用将安装并运行在你的越狱设备上。...

Global site tag (gtag.js) - Google Analytics