注:本文由破船译自:albertopasca。本文由HoNooD在iosfeed站点上做了推荐。

这里先推荐两篇Xcode相关的文章:

Xcode Code Snippets

iOS调试 — 基本技巧

本文目录:

1、添加一个特殊的断点

异常断点(Exception breakpoint)

符号断点(Symbolic breakpoint)

2、打印到控制台

使用NSLog打印字符串

使用NSLog打印对象(po)

带条件的打印

在循环里面打印一些东西

3、运行时设置断点

4、调试中播放声音

5、LLDB中有用的一些命令

打印帮助

打印调用栈

打印最基本的内容 (p)

打印对象(po)

打印表达式(expr)

打印线程中的一些东西

正文

下面是非常有用的一些Xcode调试技术(使用断点和LLDB调试器)

1、添加一个特殊的断点

异常断点(Exception breakpoint)

如果添加了异常断点,当程序每次发生了异常,都会被中断。一般用来捕获未知异常。如下示例:

  1. *** Terminating app due to uncaught exception ’NSRangeException’, reason:
  2. ’-[__NSCFArray objectAtIndex:]: index (10) beyond bounds (3)

  • 符号断点(Symbolic breakpoint)

符号断点可以中断某个函数的调用。

  1. - [UIViewController viewDidLoad]
  2. - [__NSCFArray objectAtIndex:]

2、打印到控制台

  • 使用NSLog打印字符串

使用断点来替换NSLog代码(或者在运行时添加一个NSLog)——与代码写NSLog的效果相同。

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

  • 带条件的打印

例如:当aNumber大于10才打印出“str”的内容。

  1. expr (void)NSLog(@"Ok, print a log: %@", str)"

  • 在循环里面打印一些东西

例如,在循环中希望i大于5才开始打印。

  1. for ( int i=0; i<10; i++ )
  2. {
  3. [selfself]; // something
  4. }

使用“ignore”值,并利用下面的代码进行打印:

  1. expr (void)NSLog(@"Ok, print a log: %@", str)

3、运行时设置断点

在运行的时候,根据条件设置断点有时候非常有用。

  1. breakpoint set -f APViewController.m -l 33

4、调试中播放声音

5、LLDB中有用的一些命令

当Xcode停留在某个断点时,我们可以通过控制台(console)与lldb进行交互。

  • 打印帮助
  1. (lldb) help
  • 打印调用栈(bt)
  1. (lldb) bt
  2. * 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
  3. frame #0: 0x00003146 Debug`-[APViewController callMe:andANumber:](self=0x07187e50, _cmd=0x000038b9, str=0x0715aa40, aNum=38) + 230 at APViewController.m:33
  4. frame #1: 0x0000304a Debug`-[APViewController viewDidLoad](self=0x07187e50, _cmd=0x005c5a77) + 122 at APViewController.m:16
  5. frame #2: 0x000f41c7 UIKit`-[UIViewController loadViewIfRequired] + 536
  6. frame #3: 0x000f4232 UIKit`-[UIViewController view] + 33
  7. frame #4: 0x000433d5 UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 66
  8. frame #5: 0x0004376f UIKit`-[UIWindow _setHidden:forced:] + 368
  9. frame #6: 0x00043905 UIKit`-[UIWindow _orderFrontWithoutMakingKey] + 49
  10. frame #7: 0x0004c917 UIKit`-[UIWindow makeKeyAndVisible] + 65
  11. frame #8: 0x00002e1b Debug`-[APAppDelegate application:didFinishLaunchingWithOptions:](self=0x07560750, _cmd=0x005a9c21, application=0x0716a640, launchOptions=0x00000000) + 571 at APAppDelegate.m:28
  12. frame #9: 0x00010157 UIKit`-[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 266
  13. frame #10: 0x00010747 UIKit`-[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1248
  14. frame #11: 0x0001194b UIKit`-[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 805
  15. frame #12: 0x00022cb5 UIKit`-[UIApplication handleEvent:withNewEvent:] + 1022
  16. frame #13: 0x00023beb UIKit`-[UIApplication sendEvent:] + 85
  17. frame #14: 0x00015698 UIKit`_UIApplicationHandleEvent + 9874
  18. frame #15: 0x01becdf9 GraphicsServices`_PurpleEventCallback + 339
  19. frame #16: 0x01becad0 GraphicsServices`PurpleEventCallback + 46
  20. frame #17: 0x01c06bf5 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
  21. frame #18: 0x01c06962 CoreFoundation`__CFRunLoopDoSource1 + 146
  22. frame #19: 0x01c37bb6 CoreFoundation`__CFRunLoopRun + 2118
  23. frame #20: 0x01c36f44 CoreFoundation`CFRunLoopRunSpecific + 276
  24. frame #21: 0x01c36e1b CoreFoundation`CFRunLoopRunInMode + 123
  25. frame #22: 0x0001117a UIKit`-[UIApplication _run] + 774
  26. frame #23: 0x00012ffc UIKit`UIApplicationMain + 1211
  27. frame #24: 0x00002b22 Debug`main(argc=1, argv=0xbffff3a4) + 130 at main.m:16
  28. frame #25: 0x00002a55 Debug`start + 53
  29. (lldb)
  • 打印最基本的内容 (p)
  1. (lldb) print anInt
  • 打印对象(po)
  1. (lldb) po anObj
  2. (lldb) po 0x0715aa40
  • 打印表达式(expr)
  1. (lldb) expr 5+2
  2. (lldb) expr aString = @"aNewValue"
  • 打印线程中的一些东西
  1. (lldb) help frame

本文由破船翻译●转载请注明出处●2013-07-01

Xcode中断点的使用的更多相关文章

  1. Xcode变量概览-summary

    问题描述 在Xcode中断点调试时,鼠标停留在变量上,就能看到变量的信息.但对于自定义对象,通常Xcode提供的直接信息非常有限,像这样 想要了解这个对象具体的内容,需要展开左边的箭头 当开发者想要知 ...

  2. iOS---用LLDB调试,让移动开发更简单(一)

    因文章字数超过限制,所以拆分成了上下篇 LLDB的Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.平时用Xcode运行程序,实际走的都是LLDB.熟练使用 ...

  3. iOS 开发小技巧

    1.Xcode配置 1.1> 安装Alcatraz包管理器 打开Terminal终端命令行 curl -fsSL https://raw.github.com/supermarin/Alcatr ...

  4. iOS——调试工具LLDB学习

    一.前言 LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件.在日常的开发和调试过程中给开发人员带 ...

  5. iOS 获取蜂窝网络信号强度 包含iPhoneX XS XR XSMASX (最新)

    1.虽然各种直接获取信号强度的api都被封杀了.但是还有一个另类的黑魔法可以获取到.那就是遍历UIStatusBar了 网络上有的文章写的会崩溃 比如: - (int)getSignalStrengt ...

  6. 对Xcode菜单选项的详细探索(干货)

    本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到了xcode7,但是一般都只是用了一些基础的功能,说来也惭愧.在一次偶然的机遇突然发现了“显示调用层级”的选 ...

  7. 【转】对 Xcode 菜单选项的详细探索(干货)

    http://www.cocoachina.com/ios/20151204/14480.html 本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到了xco ...

  8. xcode的菜单栏功能解析

    [Xcode 7.2]Xcode菜单栏之你不知道的那点事 File: New : 可以新建tap,窗口,新文件,playground,workspace,target等等. Add Files to ...

  9. 对 Xcode 菜单选项的详细探索(转)

    转自 http://www.cnblogs.com/dsxniubility/p/4983614.html 本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到 ...

随机推荐

  1. 【TensorFlow入门完全指南】神经网络篇·MLP多层感知机

    前面的不做过多解释了. 这里定义了两个占位符,各位也知道,在训练时,feed_dict会填充它们. 定义相关网络. 这里是权值矩阵和偏差. 这里是实例化了网络,定义了优化器和损失,和上一篇一样. 最后 ...

  2. SAP ERP和C4C Account和Contact的双向同步

    Account和Contact是C4C里唯一支持可以和ERP进行双向同步的主数据类别. C4C里创建一个Account:Mouser Electronics 在C4C里保存Account,自动同步到E ...

  3. 分享一些关于Lucene的心得

    Lucene的概述 Lucene是一个全文搜索框架,而不是应用产品.因此它并不像http://www.baidu.com/ 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实 ...

  4. JNI接口的使用(简单版)

    详见 http://b6ec263c.wiz03.com/share/s/2SX2oY0nX4f32CY5ax1bapaL2Qtc5q0tIQjG2yfwaU1MX4Ye

  5. 用Python计算最长公共子序列和最长公共子串

    如何用Python计算最长公共子序列和最长公共子串 1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公 ...

  6. 实验1 c语言最基本内容

    part 1 验证性内容 总结:经受了数组和结构体的双重折磨后,发现这部分好简单...现在没啥问题了... part  2  补全程序 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数 ...

  7. 01_11_SERVLET中使用javabean

    01_11_SERVLET中使用javabean 1. javabean 广义javabean = 普通java类 狭义javabean = 符合 Sun JavaBean标准的类 在Servlet中 ...

  8. UI Testing in Xcode 7

    参考文章: UI Testing in Xcode - WWDC 2015https://developer.apple.com/videos/play/wwdc2015-406/ Document ...

  9. 【转】MFC消息映射详解(整理转载)

    消息:主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息.例如,单击鼠标左按钮,windows将产WM_LBUTTONDOWN消息,而释放鼠标左按钮将产生WM_LBUTTONUP消息 ...

  10. python入门:从安装python开始

    python简介: Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明 ...