当前位置: 首页 > 科技观察

iOS常用调试方法:LLDB命令_0

时间:2023-03-15 16:26:11 科技观察

在iOS项目开发过程中,经常使用静态分析(Analyze)、断点(BreakPoint)和控制台(Console)进行代码调试。本文介绍Xcode常用调试方法“LLDB命令”。本文由360奇舞团QiShare团队投稿。相关阅读:《iOS 常用调试方法:静态分析》《iOS 常用调试方法:断点调试》1.简介LLDB是新一代的高性能调试器。它构建为一组可重用组件,可以高度利用大型LLVM项目中的现有库,例如Clang表达式解析器和LLVM反汇编器。LLDB是MacOSX上Xcode的默认调试器,支持在桌面、iOS设备和模拟器上调试C、Objective-C和C++。LLDB项目中的所有代码均在标准LLVM许可下提供,这是一种开源“BSD风格”许可。2、helpLLDB命令格式如下:<命令名><命令动作>[-选项[可选值]][参数1[参数2...]]LLDB命令各部分之间用空格隔开。如果参数中包含空格,则需要使用双引号将参数括起来。如果参数中包含双引号或反斜杠,则需要使用反斜杠进行转义。LLDB命令有很多功能,要完全记住它们并不容易,也没有必要。开发者可以使用help命令查看相关命令的使用情况,甚至可以查看help命令的使用情况。(lldb)helphelpShowalistofalldebuggercommands,orgivedetailsaboutaspecificcommand.Syntax:help[]CommandOptionsUsage:help[-ahu][[[...]]]-a(--隐藏-别名)隐藏命令列表中的别名。-h(--show-hidden-commands)包括带下划线的命令前缀。-u(--hide-user-commands)从列表中隐藏用户定义的命令。此命令采用选项和自由格式参数。如果您的参数类似于选项说明符(starti.e.-'在命令结尾之间3.执行在LLDB中,执行命令expression是最基本的命令,缩写为expr或e,语法为:expression--,其作用是执行一个表达式,并输出返回的结果通过表达式。示例如下://!输出count(lldb)expressioncount(NSUInteger)$0=10的值//!执行string(lldb)表达式的拼接字符串方法[stringstringByAppendingString:@"732"](__NSCFString*)$1=0x00006000006ac870@"QiShare732"//!修改view的颜色(lldb)expressionself.view.backgroundColor=[UIColorredColor](UICachedDeviceRGBColor*)$2=0x0000600001d74780(lldb)expression[CATransactionflush]//!<因为断点会终止UI线程,执行[CATransactionflush]命令可以渲染修改后的界面4.Print打印命令print是最常用的命令,缩写为pri或p,语法为:print,其作用是打印变量或表达式。通过helpprint,你会发现print其实是表达式--命令的简写:'print'是'表达式--'的缩写,其中--标识选项的结束和参数的开始。同样常用的表达式缩写命令有po和call。其中,po表示打印对象,用于打印对象,call用于调用某个方法。示例如下:(lldb)expression--self.view(UIView*)$4=0x00007f8ca8401690(lldb)eself.view(UIView*)$5=0x00007f8ca8401690(lldb)pself.view(UIView*)$6=0x00007f8ca8401690(lldb)自己。view>(lldb)callself.view(UIView*)$8=0x00007f8ca8401690另外开发者可以按照print/语法指定打印命令的打印格式:p/x//!<打印十六进制整数p/d//!<打印带符号十进制整数p/u//!<打印无符号十进制整数p/o//!<打印一个八进制整数p/t//!<打印一个二进制整数p/a//!<打印一个十六进制地址p/c//!<打印一个字符常量p/f//!