android lldb断点,LLDB断点调试

本文对比了红轴和茶轴机械键盘的选择要点,并深入讲解了LLDB调试器在iOS开发中的关键命令和用途。了解如何在写代码时选择适合的键盘,并掌握高效调试工具的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

​ LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,也是iOS开发中,配合断点使用的调试命令工具。

基本操作命令

​ 在lldb中输入help能看到所有的命令,通过help 可以看到相应命令的具体用法。以下介绍几种常用的命令。打印输出p – Evaluate an expression on the current thread. Displays any

​ returned value with LLDB’s default formatting.

po – Evaluate an expression on the current thread. Displays any

​ returned value with formatting controlled by the type’s author.

p和po两个命令是日常打印输出最常用的。po,p是expression的缩写。在命令行中输入help po,可以看到po和p命令的详细信息,is an abbreviation for 'expression -O —',```1

2``` 'p' is an abbreviation for 'expression —'

po输出的是对象的description方法的返回值,也可以重写对象的description方法来改变输出。而p输出的是LLDB的默认格式。例如下图NSArray的打印输出。po和p命令同时也能执行代码。根接下来的expr命令功能相同。动态执行代码expression – Evaluate an expression on the current thread. Displays

any returned value with LLDB’s default formatting.

expr命令可以执行输入的代码块(call命令的效果相同,都是调用__lldb_expr函数)。通过输入的代码块,我们可以动态的改变变量的值,可以调用一个方法…。使用Option+Enter键可以输入多行代码。

如上图,动态的执行obj=nil这段代码,将obj的值置为nil。需要补充的是,expr命令接收的代码不能直接使用枚举值,例如NSRoundUp需要转化为(NSRoundingMode)1。此外,expr命令不能执行return value。display – Evaluate an expression at every stop (see ‘help target

stop-hook’.)

display作用的与expr相同,都是执行一段代码,而display命令在每一次到断点的时候都会执行一遍输入的代码。查看堆栈信息(lldb) help bt

​ —Show the current thread’s call stack. Any numeric argument displays at

​ most that many frames. The argument ‘all’ displays all threads. Expects

​ ‘raw’ input (see ‘help raw-input’.)

Syntax: bt [| all]

‘bt’ is an abbreviation for ‘_regexp-bt’

​ 此外,在lldb中只要获取到对象的地址,就能使用expr,call命令调用对象的方法。因为,oc是方法的调用都是msg_send函数。

<think>好的,我现在需要帮助用户了解如何在Android环境中配置和使用LLDB调试器。首先,我应该回顾用户提供的引用内容,特别是引用1、2和3,这些内容提到了LLDBAndroid Studio中的集成,以及一些配置方法。用户可能希望从基础步骤开始,比如环境准备、配置过程、调试方法等。 首先,我需要确认用户的环境需求,比如Android Studio的版本、NDK的安装情况,以及是否已经配置了gradle-experimental插件。根据引用1,LLDB需要从SDK Tools中下载最新版本,并配合Android Studio和gradle-experimental使用。这可能涉及到SDK Manager中的安装步骤。 接下来,配置项目以支持LLDB调试。根据引用2,用户需要在运行/调试配置中选择使用LLDB,并设置相关的启动命令和符号目录。这里可能需要修改build.gradle文件,启用调试符号,并确保NDK版本正确。此外,引用3提到用户可能更推荐使用VSCode或Clion,但用户的问题明确是关于Android环境的,因此需要集中在Android Studio的配置上。 调试步骤方面,需要指导用户如何设置断点,启动调试会话,以及使用LLDB的命令行界面。可能还需要解释一些常用的LLDB命令,比如打印变量、查看调用栈等。同时,要提醒用户关于符号目录和连接后命令的设置,如引用2所述。 另外,用户可能遇到常见问题,比如无法断点命中或符号加载失败。需要根据引用中的信息,检查NDK版本、符号路径是否正确,以及调试器权限是否足够。可能还需要建议用户参考官方文档或社区资源,如引用1和2提到的内容。 最后,生成相关问题,帮助用户进一步学习,比如优化调试效率的方法,与GDB的区别,或结合其他工具如VSCode使用LLDB。根据引用3,可以提及替代工具,但主要回答应围绕Android Studio的环境。 总结步骤:环境准备→配置项目→调试步骤→常见问题→相关资源。确保每个步骤清晰,引用正确,并符合用户提供的格式要求,如行内公式使用$...$,独立公式用$$...$$,但这里可能不需要数学公式,重点在配置和命令。同时,保持回答结构清晰,使用中文,并在引用处添加标识符如[^1]。</think>### Android环境中使用LLDB调试器配置与使用教程 #### 一、环境准备 1. **安装Android Studio及NDK** - 确保已安装Android Studio(推荐最新稳定版) - 通过SDK Manager安装NDK和LLDB工具: **路径**:`Tools > SDK Manager > SDK Tools > 勾选NDK和LLDB` ![SDK Manager配置示例](https://example.com/sdk-manager-lldb.png)(注:此处为示意图) 2. **项目配置** - 在`build.gradle`中启用调试符号与LLDB支持: ```gradle android { defaultConfig { externalNativeBuild { cmake { arguments "-DCMAKE_BUILD_TYPE=Debug" } } } } ``` #### 二、配置调试流程 1. **创建调试配置** - 点击`Run > Edit Configurations`,选择`Android Native`类型 - 在`Debugger`选项卡中选择`LLDB`,并配置符号目录(如`.so`文件路径)[^2] - 设置启动命令(例如设置断点): ``` breakpoint set --name main ``` 2. **附加到进程调试** - 启动应用后,点击`Run > Attach Debugger to Android Process` - 选择目标进程并勾选`Show all processes`以查看Native进程 #### 三、调试操作指南 1. **基础命令** - 查看变量:`frame variable [变量名]` - 断点管理: ```bash breakpoint set --file test.cpp --line 20 # 设置断点 breakpoint delete 1 # 删除断点 ``` - 单步执行:`next`(跳过函数)或`step`(进入函数) 2. **查看调用栈** - 输入`bt`(backtrace)可查看当前线程的调用栈 #### 四、常见问题与解决 1. **断点未命中** - 检查NDK版本是否兼容(推荐≥r21) - 确认`.so`文件包含调试符号(编译时添加`-g`标志) 2. **符号加载失败** - 在LLDB配置中手动添加符号路径: ```bash settings set target.symbol-path /path/to/symbols ``` #### 五、相关工具与扩展 - **VSCode + LLDB插件**:提供更友好的调试界面(如内存查看、可视化变量跟踪)[^3] - **Clion**:适合复杂C/C++项目的跨平台调试(需配合Android项目配置) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值