设置断点以暂停正在运转的运用程序

断点调试相关

developer.apple.com/documentati…

概述

当您在源代码中找到出问题的方位时,能够设置断点,以便您能够检查变量并单步履行代码找出问题。

要定位难以知道在哪里设置断点的溃散或其他过错,请运用符号断点或issue breakpoints来暂停特定的问题条件并快速确认过错产生的方位。

关于在多次迭代后或仅在某些状况下呈现的过错,请在断点上指定条件。如果你想在运用程序的specific points,或许在某一行履行时receive notifications 你能够运用breakpoint actions

Specify Where to Pause Your App (指定断点的方位)

导航到代码中要暂停履行的行,然后单击源代码修正器中的距离或行号以设置断点。 Xcode 显现一个断点图标来指示方位。

ios调试技巧(2)  设置符号断点暂停你的程序

向上或向下拖动断点以将其移动到另一个方位;将其移除。单击调试区域东西栏中的断点图标可激活或停用所有断点。

Manage Breakpoints Across Your App

当您在多个源代码文件中设置了多个断点时,单击主窗口导航器区域中的断点导航器按钮以打开断点导航器以检查和办理所有断点。

ios调试技巧(2)  设置符号断点暂停你的程序

单击断点导航器中的断点标签可快速导航到源代码修正器中的断点。挑选断点标签后按 Delete 键可从代码中删除断点。单击断点导航器中的断点图标以启用或禁用它。

要在导航器中轻松找到常用断点,请按住 Control 键单击断点标签,挑选“修正断点”,然后为其输入名称。然后运用断点导航器底部的过滤器。

您还能够运用过滤器在断点的代码行中按符号查找断点。过滤器东西供给了仅显现修正断点和仅显现启用断点的选项。

Specify Conditions for Pausing Your App (指定暂停运用的条件)

关于在一定次数的迭代之后呈现的bug,或许在需要重复动作的有限条件下,在断点处暂停并反复按Continue按钮直到bug呈现是很麻烦的。有两种办法能够在调试器中更有效地处理这种状况。

关于在一定次数的迭代后呈现的过错,将调试器设置为忽略某些迭代的断点。按住 Control 键单击断点,挑选 Edit Breakpoint,然后指定在中止之前忽略断点的次数。

ios调试技巧(2)  设置符号断点暂停你的程序

关于在有限条件下产生的过错,请将调试器设置为在表达式为真时在断点处暂停。按住 Control 键单击断点,挑选 Edit Breakpoint,然后运用本地范围内可用的变量输入条件。

ios调试技巧(2)  设置符号断点暂停你的程序

调试器每次抵达履行断点时都会计算表达式,而且仅当表达式为真时才会暂停。

Pause on a Symbol Outside Your Code (在代码外的符号处暂停)

要调试某些问题,您需要在源代码未定义的符号上暂停。例如,当您遇到主动布局问题时,过错音讯主张在 UIViewAlertForUnsatisfiableConstraints 上设置断点。为此,请运用符号断点。

在断点导航器中,单击左下角的增加按钮 (+),然后挑选符号断点。运用示例文本的格式在符号字段中输入对象和符号。

ios调试技巧(2)  设置符号断点暂停你的程序

当运用程序或您的代码调用您指定的符号时,调试器会暂停。示例符号 UIViewAlertForUnsatisfiableConstraints 一般在运用程序的 main 办法中暂停,而不是在代码中的一行。产生这种状况时,运用控制台检查带有 po [[UIWindow keyWindow] _autolayoutTrace] 的主动布局盯梢。


提示:
一些符号十分频频地被调用,而且在每个符号上暂停或许不好处理。向断点增加条件以减少调用频率,或禁用符号断点,直到代码中抵达要开始查找问题的断点,然后启用符号断点。

Pause on an Uncaught Swift Error or Objective-C Exception (暂停未捕获的 Swift 过错或 Objective-C 反常)

当您的运用遇到未处理的 Swift 过错或 Objective-C 反常时,它会溃散。一般,仓库盯梢不会直接指向问题产生的方位。设置断点以在未捕获的 Swift 过错或 Objective-C 反常上暂停,以便您定位问题。

当一个未处理的 Swift 过错导致溃散时,调试器会在 try! 行显现一个丧命过错。而不是开始产生过错的地方。

ios调试技巧(2)  设置符号断点暂停你的程序

如果抛出的过错有有用的过错音讯,那么这或许足以解决问题。如果没有,请增加一个 Swift 过错断点以在引发过错的行上暂停。在 Breakpoint 导航器中,单击左下角的 Add 按钮 (+),然后挑选 Swift Error Breakpoint。然后运用程序暂停抛出的过错而不是 try!。

ios调试技巧(2)  设置符号断点暂停你的程序

当未捕获的 Objective-C 过错导致溃散时,调试器会在 AppDelegate 或 main 办法中显现溃散。

ios调试技巧(2)  设置符号断点暂停你的程序

增加一个 Objective-C 反常断点以在产生溃散的行而不是 main 处暂停。在 Breakpoint 导航器中,单击左下角的 Add 按钮 (+),然后挑选 Exception Breakpoint。

ios调试技巧(2)  设置符号断点暂停你的程序

Pause Automatically When the System Detects a Runtime Issue (当系统检测到运转时问题时主动暂停)

Xcode 具有称为 sanitizers 的东西来检测几种不同类型的运转时问题:

1.在主线程之外更新用户界面

2.不安全地更新来自不同线程的变量

  1. 不安全地访问地址以及履行导致未定义行为的代码。

4.Configure your scheme to enable sanitizers 使整理程序能够在构建时经过静态分析检测这些问题。当您禁用整理程序而且您的运用遇到这些问题之一时,您的运用溃散而且 Xcode 或许无法清楚地识别问题产生的方位。

ios调试技巧(2)  设置符号断点暂停你的程序

要暂停您的运用程序并进行查询,请单击断点导航器左下角的增加按钮 (+),挑选运转时问题断点,然后挑选断点的运转时问题类型。

ios调试技巧(2)  设置符号断点暂停你的程序

为问题启用 sanitizer 并运转您的运用程序。 sanitizer 识别它预期会产生运转时问题的代码行。当运用程序在您的运转时断点处暂停时,查询问题产生的原因。有关详细信息,请参阅及Diagnosing Memory, Thread, and Crash Issues Early.。

Log Variable Values, Run Scripts, or Play Sounds at a Breakpoint (记载变量值、运转脚本或在断点处播放声响)

无需运用NSLog打印来记载变量值和有关运用程序履行的详细信息,而是运用debugger commands 来记载音讯并履即将变量值打印到控制台的调试器指令。

断点动作也能够在调试器抵达断点时播放声响,这关于知道代码何时履行而不暂停很有用。断点操作能够履行 AppleScripts 或 shell 脚原本履行有用的调试任务,例如截屏或保存一些运用程序数据以供分析。

要运用断点履行操作,请在源代码修正器或断点导航器中按住 Control 键单击断点,挑选 Edit Breakpoint,单击 Add Action,挑选一个操作并供给任何必要的附加信息。例如,为 Log Message 操作供给音讯,或为 Debugger Command 操作供给指令和参数。

ios调试技巧(2)  设置符号断点暂停你的程序

要在断点处履行多个操作,请单击现有操作右侧的增加按钮 (+) 以增加另一个操作。要在履行操作后持续履行您的运用程序而不暂停,请挑选“评价操作后主动持续”选项。