在iOS开发中常用的LLDB命令:
LLDB(Low-Level Debugger)是一个用于调试程序的开源软件。在iOS开发中,LLDB主要与Xcode集成,用于调试Objective-C和Swift编写的应用程序。LLDB能帮助开发者找出程序中的错误、分析程序运行情况以及探究程序内部状态。
使用LLDB,您可以:
设置断点:在程序的特定行停止执行,以便您可以查看该时刻的状态。
单步执行:一行一行地执行代码,以更好地理解程序的执行过程。
查看变量值:查看程序中各种变量和数据结构的值。
修改变量值:在调试过程中动态更改变量值,以测试不同的条件和情况。
执行表达式:在调试会话中执行代码,以便检查和验证程序行为。
调用堆栈跟踪:查看函数调用堆栈,以了解当前执行上下文。
LLDB提供了丰富的命令行接口,使开发者可以在调试会话中输入命令。同时,Xcode也为LLDB提供了图形界面,使调试更加直观。了解LLDB的基本用法和常用命令可以帮助您更有效地找出和解决程序中的问题。
breakpoint set
(缩写:br s
): 设置断点。例如,breakpoint set --line 25
在第25行设置一个断点。
breakpoint list
(缩写:br l
): 显示已设置的所有断点。
breakpoint delete
(缩写:br d
): 删除一个或多个断点。例如,breakpoint delete 1
删除编号为1的断点。
breakpoint enable/disable
(缩写:br en/dis
): 启用或禁用一个或多个断点。
continue (缩写:
c`): 从当前位置继续执行程序,直到遇到下一个断点或程序结束。
step (缩写:
s`): 单步执行一行代码。如果遇到函数调用,会进入该函数。
next (缩写:
n`): 单步执行一行代码。如果遇到函数调用,会跳过该函数。
finish
(缩写:f
): 从当前函数中返回,继续执行上一级函数。
thread backtrace
(缩写:bt
): 显示当前线程的调用堆栈。
frame variable
(缩写:fr v
): 显示当前堆栈帧的所有变量和参数。
expression
(缩写:expr
): 执行一个表达式。可以用于查看、修改变量值,或执行任意代码。例如,expression myVariable = 5
。
po
: 打印对象的描述。与expression
类似,但适用于Objective-C
和Swift
对象。例如,po myArray
。
run
(缩写:r
): 重新启动并运行程序。如果有设置启动参数,可以在此命令后添加。
thread list
(缩写:th l
): 列出当前进程中的所有线程。
thread select
(缩写:th s
): 选择一个指定线程。例如,thread select 2
会切换到编号为2的线程。
frame select
(缩写:fr s
): 选择一个指定的堆栈帧。例如,frame select 1
会切换到编号为1的堆栈帧。
frame info
(缩写:fr i
): 显示当前堆栈帧的信息。
image list
(缩写:im li
): 显示程序中的所有加载的二进制映像(包括应用程序本身、系统框架和库)。
breakpoint set --name
(缩写:br s -n
): 根据函数名或方法名设置断点。例如,breakpoint set --name viewDidLoad
会在所有的viewDidLoad方法处设置断点。
breakpoint set --selector
(缩写:br s -S
): 根据Objective-C
方法选择器设置断点。例如,breakpoint set --selector viewDidLoad
。
breakpoint set --source-regex
(缩写:br s -p
): 使用正则表达式匹配源代码行来设置断点。例如,breakpoint set --source-regex 'myFunction()'
。
watchpoint set variable (缩写:w s v
): 设置一个观察点,以便在指定变量值发生更改时中断程序。例如,watchpoint set variable myVariable。
watchpoint list
(缩写:w l
): 列出已设置的观察点。
watchpoint delete
(缩写:w d
): 删除一个或多个观察点。例如,watchpoint delete 1
。
settings show
: 显示LLDB当前的配置设置。
settings set
: 修改LLDB的配置设置。例如,settings set target.language swift
将目标语言设置为Swift
。
register read
: 读取并显示处理器寄存器的值。
register write
: 修改处理器寄存器的值。例如,register write rax 0x100
将寄存器RAX的值设置为0x100
。
memory read
(缩写:me r
): 读取并显示内存中的数据。例如,memory read 0x100000
。
memory write
(缩写:me w
): 将数据写入内存。例如,memory write 0x100000 0x42
。
disassemble
(缩写:di
): 反汇编当前函数或指定地址的机器代码。
breakpoint command add
: 为特定断点添加一个或多个自定义命令。当断点被触发时,这些命令将自动执行。例如,breakpoint command add 1 -o "expr myVariable = 5"
。
breakpoint set --file
(缩写:br s -f
): 在指定文件的特定行设置断点。例如,breakpoint set --file main.swift --line 25
。
breakpoint set --symbol
(缩写:br s -s
): 根据符号名设置断点。例如,breakpoint set --symbol myFunction
。
breakpoint set --address
(缩写:br s -a
): 根据内存地址设置断点。例如,breakpoint set --address 0x100000
。
breakpoint modify
: 修改已设置断点的属性。例如,breakpoint modify --ignore-count 5 1
忽略编号为1的断点的前5次触发。
target create
: 创建一个新的调试目标。例如,target create myExecutable
。
target list
: 显示所有调试目标。
target select
: 选择一个特定的调试目标。例如,target select 1
。
target modules search-paths add
: 添加模块搜索路径。例如,target modules search-paths add /path/to/libs
。
breakpoint set --source-pattern-regexp
: 使用正则表达式匹配源代码行来设置断点。例如,breakpoint set --source-pattern-regexp 'myFunction()'
。
breakpoint set --fullname
: 根据完整的文件名和行号设置断点。例如,breakpoint set --fullname /path/to/file/main.swift:25
。
thread until
(缩写:th u
): 在当前线程中执行指令,直到指定的行号。例如,thread until 25
。
thread jump
(缩写:th j
): 在当前线程中跳过指定的行数。例如,thread jump --by 2
。
process load/unload
: 加载或卸载动态库。例如,process load /path/to/libMyLibrary.dylib
。
process signal
: 向当前进程发送信号。例如,process signal SIGINT
。
process save-core
: 保存当前进程的核心转储。例如,process save-core /path/to/dump/core.dump
。
type summary add
: 为自定义类型添加摘要。例如,type summary add --summary-string "x = ${var.x}, y = ${var.y}" MyPoint
。
breakpoint set --one-shot
(缩写:br s -o
): 设置一次性断点。该断点在触发一次后自动删除。例如,breakpoint set --one-shot --line 25
。
expression --top-level
: 在顶层上下文中执行表达式,而不是当前堆栈帧。例如,expression --top-level -- myGlobalVariable = 42
。
type format add
: 为类型添加自定义格式。例如,type format add --format hex MyIntegerType
。
type lookup
: 查找指定类型的信息。例如,type lookup MyCustomClass
。
type category enable/disable
: 启用或禁用特定类型的分类。例如,type category enable myCategory
。
source list
: 列出当前堆栈帧所在源文件的源代码。
source info
: 显示当前堆栈帧所在源文件的信息。
alias
: 为常用的LLDB命令创建别名。例如,alias b breakpoint set
。
unalias
: 删除之前创建的别名。例如,unalias b
。
settings append
: 向配置设置添加一个值。例如,settings append target.source-map /old/path /new/path
。
settings replace
: 替换配置设置中的一个值。例如,settings replace target.source-map /old/path /new/path
。
settings remove
: 删除配置设置中的一个值。例如,settings remove target.source-map /old/path
。
网友评论