Xcode中断点的使用
注:本文由破船译自:albertopasca。本文由HoNooD在iosfeed站点上做了推荐。
这里先推荐两篇Xcode相关的文章:
iOS调试 — 基本技巧
本文目录:
1、添加一个特殊的断点
异常断点(Exception breakpoint)
符号断点(Symbolic breakpoint)
2、打印到控制台
使用NSLog打印字符串
使用NSLog打印对象(po)
带条件的打印
在循环里面打印一些东西
3、运行时设置断点
4、调试中播放声音
5、LLDB中有用的一些命令
打印帮助
打印调用栈
打印最基本的内容 (p)
打印对象(po)
打印表达式(expr)
打印线程中的一些东西
正文
下面是非常有用的一些Xcode调试技术(使用断点和LLDB调试器)
1、添加一个特殊的断点
异常断点(Exception breakpoint)
如果添加了异常断点,当程序每次发生了异常,都会被中断。一般用来捕获未知异常。如下示例:
- *** Terminating app due to uncaught exception ’NSRangeException’, reason:
- ’-[__NSCFArray objectAtIndex:]: index (10) beyond bounds (3)

- 符号断点(Symbolic breakpoint)
符号断点可以中断某个函数的调用。
- - [UIViewController viewDidLoad]
- - [__NSCFArray objectAtIndex:]

2、打印到控制台
- 使用NSLog打印字符串
使用断点来替换NSLog代码(或者在运行时添加一个NSLog)——与代码写NSLog的效果相同。

- 使用NSLog打印对象(po)
- NSLog(@"obj: %@", obj);

- 带条件的打印
例如:当aNumber大于10才打印出“str”的内容。
- expr (void)NSLog(@"Ok, print a log: %@", str)"

- 在循环里面打印一些东西
例如,在循环中希望i大于5才开始打印。
- for ( int i=0; i<10; i++ )
- {
- [selfself]; // something
- }
使用“ignore”值,并利用下面的代码进行打印:
- expr (void)NSLog(@"Ok, print a log: %@", str)

3、运行时设置断点
在运行的时候,根据条件设置断点有时候非常有用。
- breakpoint set -f APViewController.m -l 33

4、调试中播放声音

5、LLDB中有用的一些命令
当Xcode停留在某个断点时,我们可以通过控制台(console)与lldb进行交互。
- 打印帮助
- (lldb) help
- 打印调用栈(bt)
- (lldb) bt
- * thread #1: tid = 0x1c03, 0x00003146 Debug`-[APViewController callMe:andANumber:](self=0x07187e50, _cmd=0x000038b9, str=0x0715aa40, aNum=38) + 230 at APViewController.m:33, stop reason = breakpoint 3.1
- frame #0: 0x00003146 Debug`-[APViewController callMe:andANumber:](self=0x07187e50, _cmd=0x000038b9, str=0x0715aa40, aNum=38) + 230 at APViewController.m:33
- frame #1: 0x0000304a Debug`-[APViewController viewDidLoad](self=0x07187e50, _cmd=0x005c5a77) + 122 at APViewController.m:16
- frame #2: 0x000f41c7 UIKit`-[UIViewController loadViewIfRequired] + 536
- frame #3: 0x000f4232 UIKit`-[UIViewController view] + 33
- frame #4: 0x000433d5 UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 66
- frame #5: 0x0004376f UIKit`-[UIWindow _setHidden:forced:] + 368
- frame #6: 0x00043905 UIKit`-[UIWindow _orderFrontWithoutMakingKey] + 49
- frame #7: 0x0004c917 UIKit`-[UIWindow makeKeyAndVisible] + 65
- frame #8: 0x00002e1b Debug`-[APAppDelegate application:didFinishLaunchingWithOptions:](self=0x07560750, _cmd=0x005a9c21, application=0x0716a640, launchOptions=0x00000000) + 571 at APAppDelegate.m:28
- frame #9: 0x00010157 UIKit`-[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 266
- frame #10: 0x00010747 UIKit`-[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1248
- frame #11: 0x0001194b UIKit`-[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 805
- frame #12: 0x00022cb5 UIKit`-[UIApplication handleEvent:withNewEvent:] + 1022
- frame #13: 0x00023beb UIKit`-[UIApplication sendEvent:] + 85
- frame #14: 0x00015698 UIKit`_UIApplicationHandleEvent + 9874
- frame #15: 0x01becdf9 GraphicsServices`_PurpleEventCallback + 339
- frame #16: 0x01becad0 GraphicsServices`PurpleEventCallback + 46
- frame #17: 0x01c06bf5 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
- frame #18: 0x01c06962 CoreFoundation`__CFRunLoopDoSource1 + 146
- frame #19: 0x01c37bb6 CoreFoundation`__CFRunLoopRun + 2118
- frame #20: 0x01c36f44 CoreFoundation`CFRunLoopRunSpecific + 276
- frame #21: 0x01c36e1b CoreFoundation`CFRunLoopRunInMode + 123
- frame #22: 0x0001117a UIKit`-[UIApplication _run] + 774
- frame #23: 0x00012ffc UIKit`UIApplicationMain + 1211
- frame #24: 0x00002b22 Debug`main(argc=1, argv=0xbffff3a4) + 130 at main.m:16
- frame #25: 0x00002a55 Debug`start + 53
- (lldb)
- 打印最基本的内容 (p)
- (lldb) print anInt
- 打印对象(po)
- (lldb) po anObj
- (lldb) po 0x0715aa40
- 打印表达式(expr)
- (lldb) expr 5+2
- (lldb) expr aString = @"aNewValue"
- 打印线程中的一些东西
- (lldb) help frame
本文由破船翻译●转载请注明出处●2013-07-01
Xcode中断点的使用的更多相关文章
- Xcode变量概览-summary
问题描述 在Xcode中断点调试时,鼠标停留在变量上,就能看到变量的信息.但对于自定义对象,通常Xcode提供的直接信息非常有限,像这样 想要了解这个对象具体的内容,需要展开左边的箭头 当开发者想要知 ...
- iOS---用LLDB调试,让移动开发更简单(一)
因文章字数超过限制,所以拆分成了上下篇 LLDB的Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.平时用Xcode运行程序,实际走的都是LLDB.熟练使用 ...
- iOS 开发小技巧
1.Xcode配置 1.1> 安装Alcatraz包管理器 打开Terminal终端命令行 curl -fsSL https://raw.github.com/supermarin/Alcatr ...
- iOS——调试工具LLDB学习
一.前言 LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件.在日常的开发和调试过程中给开发人员带 ...
- iOS 获取蜂窝网络信号强度 包含iPhoneX XS XR XSMASX (最新)
1.虽然各种直接获取信号强度的api都被封杀了.但是还有一个另类的黑魔法可以获取到.那就是遍历UIStatusBar了 网络上有的文章写的会崩溃 比如: - (int)getSignalStrengt ...
- 对Xcode菜单选项的详细探索(干货)
本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到了xcode7,但是一般都只是用了一些基础的功能,说来也惭愧.在一次偶然的机遇突然发现了“显示调用层级”的选 ...
- 【转】对 Xcode 菜单选项的详细探索(干货)
http://www.cocoachina.com/ios/20151204/14480.html 本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到了xco ...
- xcode的菜单栏功能解析
[Xcode 7.2]Xcode菜单栏之你不知道的那点事 File: New : 可以新建tap,窗口,新文件,playground,workspace,target等等. Add Files to ...
- 对 Xcode 菜单选项的详细探索(转)
转自 http://www.cnblogs.com/dsxniubility/p/4983614.html 本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到 ...
随机推荐
- LeetCode Pascal's Triangle Pascal三角形
题意:给一个数字,返回一个二维数组,包含一个三角形. 思路:n=0.1.2都是特例,特别处理.3行以上的的头尾都是1,其他都是依靠上一行的两个数.具体了解Pascal三角形原理. class Solu ...
- 使用ABAP代码返回S/4HANA Material上维护的Attachment明细
在事务码 MM02里为ID为16的material维护附件: 如何使用ABAP代码获得如下附件的名称和文件内容? REPORT zgos_api. DATA ls_appl_object TY ...
- WINDOWS-基础:LPTSTR
1. LPTSTR解释 与char*等价,表示普通字符/字符串变量,指向字符/字符串的指针. LP: 长指针(long pointer). T: win32环境中有一个_T宏,用来标识字符是否采 ...
- Framework的简单创建
如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为他们可 ...
- Android读书笔记四
第四章 这是一次源代码之旅,学到了如何下载和编译Android源代码和Linux内核源代码.来详细阐述一下一些具体过程 一.Android源代码下载环境 1.安装下载Android源代码的环境配置 ( ...
- C++ 学习笔记(三)string 类
在C语言中如果想要使用字符串那么有两种方法: 1.定义char型数组:char[10]; 然后将每个字符填充到对应的位置. 优点:这种方式将字符串放在内存所以每个位置都可以修改. 缺点:赋值比较麻烦, ...
- centOS下lnamp安装
首先安装apache,mysql ,最后安装php 1>apache安装 安装:yum install -y httpd 运行:/bin/systemctl start httpd.servic ...
- Python基础(五)——闭包与lambda的结合
(1)变量的域 要了解闭包需要先了解变量的域,也就是变量在哪一段“上下文”是有效的(类似局部变量和全局变量的区别),举一个很简单的例子.(例子不重要,就是涉及闭包就要时刻关注这个域) def test ...
- python中字典的‘增、删、改、查’
python 字典的'增.删.改.查' 用 ipython 运行情况如下: #新建字典 In [1]: infos = {'name':'dongge','age':18} In [2]: infos ...
- UVA - 11572 Unique Snowflakes 滑动扫描
题目:点击打开题目链接 思路:从左往右扫描,定义扫描左端点L,右端点R,保证每次往几何中添加的都是符合要求的连续的数列中的元素,L和R从0扫到n,复杂度为O(n),使用set维护子数列,set查找删除 ...