博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift之debug调试和控制台ddlb调试
阅读量:4290 次
发布时间:2019-05-27

本文共 3677 字,大约阅读时间需要 12 分钟。

======================控制台面板设置代替print

参考:debug断点调试https://www.jianshu.com/p/55ce421e47e9

1.Condition:输入框内添加 Bool 表达式,使用 Swfit 的语法,使用的变量仅限于断点所在类以及所在函数栈中的变量。如果不添加约束条件(Condition 后面的输入框内为空),则每次循环时都会执行添加的动作。

2.Ignore:跳过符合条件的前几次触发,注意,这里很容易犯下错误,这里的跳过次数是指在应用的整个生命周期内,也就是说这只是一次性有效。比如上面的 for 循环所在的函数即使多次执行,设定的忽略次数在用完后就完了,而不是每次 for 循环执行时跳过指定的次数。这个参数是一次性有效,而第1点的条件约束则是永久有效。

    

    3.Action:想要取代 print 的我暂时只需要第3和4个选项,一个断点可以添加多个动作,这个才是我这篇的重点。

4.Options:如果不需要在断点处暂停,勾选最后一个选项「Automatically continue after evaluation actions」,执行操作后继续运行;否则,应用将会暂停,此时可以在控制台与应用进行交互,实际上 LLDB 此时让你直接介入应用的运行,你可以像写代码一样修改变量,执行其他动作,以 LLDB 的形式。

想要在控制台 print 有两个选择:Debugger Command 和 Log Message。

=======================

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

db不是万能的,可是没有gdb却是万万不能的。这里给大家简单介绍下iOS开发中最基本的gdb命令。

po

po是print-object的简写,可用来打印所有NSObject对象。使用举例如下:

(gdb) po self

<LauncherViewController: 0x552c570>

(gdb) po [self view]

<UIView: 0x544eb80; frame = (0 0; 320 411); autoresize = W+H; layer = <CALayer: 0x544ebb0>>

(gdb) print-object [self view]

<UIView: 0x544eb80; frame = (0 0; 320 411); autoresize = W+H; layer = <CALayer: 0x544ebb0>>

p

p是print的简写,可以用来打印所有的简单类型,如int, float,结构体等。使用举例如下:

(gdb) p self

$1 = (LauncherViewController *) 0x552c570

(gdb) p [[self view] size]

Unable to call function “objc_msgSend” at 0x1e7e08c: no return type information available.

To call this function anyway, you can cast the return type explicitly (e.g. ‘print (float) fabs (3.0)’)

(gdb) p (CGSize)[[self view] size]

$1 = {

    

    width = 320,

    

    height = 411

    

}

(gdb) print (CGSize)[[self view] size]

$2 = {

    

    width = 320,

    

    height = 411

    

}

call

call即是调用的意思。其实上述的po和p也有调用的功能。因此一般只在不需要显示输出,或是方法无返回值时使用call。使用举例如下:

(gdb) call [[self view]sizeToFit]

Unable to call function “objc_msgSend” at 0x1e7e08c: no return type information available.

To call this function anyway, you can cast the return type explicitly (e.g. ‘print (float) fabs (3.0)’)

(gdb) call (void)[[self view]sizeToFit]

(gdb) call [[self view] size]

Unable to call function “objc_msgSend” at 0x1e7e08c: no return type information available.

To call this function anyway, you can cast the return type explicitly (e.g. ‘print (float) fabs (3.0)’)

(gdb) call (void)[[self view] size]

**************************************************************************************************************

Xcode的调试器为用户提供了一个GDB的界面,GDB是GNU组织的开放源代码调试器。您可以在Xcode的图形界面里做任何事情;但是,如果您需要 您可以在命令行里使用GDB的命令。

要在一个调试的任务里输入GDB命令行命令:

在工具栏里点击Console Drawer (控制台抽屉窗口)按钮打开控制台。

您可以在控制台里查看Xcode调试器发送给GDB的命令,或者您可以直接在控制台里输入GDB命令。在控制台窗口里点击然后在gdb提示符后面 输入命令。

命 令                        解释

break NUM               在指定的行上设置断点。

bt                      显 示所有的调用栈帧。该命令可用来显示函数的调用顺序。

clear                   删 除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。

continue                继续执行正在调试的程序。该命令用在程序 由于处理信号或断点而

导致停止运行 时。

display EXPR            每次程序停止后显示表达式的值。表达式由程序定 义的变量组成。

file FILE               装载指定的可执行文件进行调试。

help NAME               显 示指定命令的帮助信息。

info break              显 示当前断点清单,包括到达断点处的次数等。

info files              显 示被调试文件的详细信息。

info func               显示所有的函数名称。

info local              显 示当函数中的局部变量信息。

info prog               显示被调试程序的执行状 态。

info var                显示所有的全局和静态变量名称。

kill                    终 止正被调试的程序。

list                    显示源代码段。

make                    在 不退出 gdb 的情况下运行 make 工具。

next                    在 不单步执行进入其他函数的情况下,向前执行一行源代码。

print EXPR              显 示表达式 EXPR 的值。

print- object            打印一个对象

print (int) name      打印一个类型

print- object [artist description]   调用一个函数

set artist = @"test"    设置变量值

whatis                      查 看变理的数据类型 

你可能感兴趣的文章
优化用户登录体验效果
查看>>
用js批量选中功能实现更改数据库中status状态值_优就业
查看>>
JavaScript事件详解-zepto的事件实现(二)
查看>>
MySql表信息基础知识学习
查看>>
为什么document找到的不是html节点_优就业
查看>>
Javascript本地存储小结
查看>>
常用排序方法介绍
查看>>
Java异常分类和统一处理
查看>>
原 荐 cache线程池对数据库操作的饥饿问题
查看>>
使用Eclipse把java文件打包成jar 含有第三方jar库的jar包
查看>>
3种web会话管理的方式
查看>>
SSM(框架)-异常1:面向接口式编程异常
查看>>
Android蓝牙4.0之玩爆智能穿戴、家具(二)
查看>>
使用Condition实现多线程之间调用
查看>>
javaAPI之String
查看>>
JQ 新窗口打开链接并设置参数
查看>>
JQuery实现列表中复选框全选反选功能封装
查看>>
JAVA GC 简单总结
查看>>
JS中常遇到的浏览器兼容问题和解决方法
查看>>
JAVA学习笔记之-servlet知识点
查看>>