LLDB启动需显式加载目标或用--分隔参数,传参必须用--;断点设置更严格,条件断点语法不同;寄存器需用reg read而非p/x $rax;内存查看用memory read;STL容器需加载libcxx插件;线程控制命令命名不同且默认行为有异。
lldb 启动和加载目标程序时要注意什么
LLDB 不像 GDB 那样默认支持
这种直接带路径启动的方式。你必须显式用
命令加载二进制,或在启动时用
分隔参数。
正确方式一(推荐):
正确方式二:
错误方式:
—— 这会把
当作 lldb 子命令解析,报错
传参必须用
显式分隔:
如果程序依赖动态库路径,记得提前设置
或用
环境变量
(
mac
OS),否则
时可能报
断点设置和管理的差异在哪
GDB 的
在 LLDB 里基本可用,但底层机制不同:LLDB 默认按符号名解析,不自动 fallback 到地址;且函数重载、模板实例化时行为更严格。
和
等价,但后者是别名,不是所有版本都启用(可通过
启用部分兼容)
按行号设断点:
(GDB 是
),注意路径需匹配 debug info 中记录的绝对路径
条件断点写法不同:
(GDB 是
)
禁用/启用断点用
/
,不是
;编号查看用
(GDB 是
)
临时断点不存在原生命令,得用
(
表示 one-shot)
查看变量和内存时容易出错的操作
LLDB 的
默认调用表达式解析器(Clang-based),支持 C++11+ 语法,但也因此对未求值表达式更敏感;GDB 的
更“宽容”,有时会静默失败。
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
在 LLDB 中无效 —— 寄存器要加
,但必须用
或
;
会报错
查看内存用
(GDB 是
),缩写为
(
表示
word
,4
字节
)
打印 STL 容器(如
)需加载
插件,否则只显示原始字段;运行
后再
(简写
)比
更安全:它只读取当前栈帧中已知变量,不触发表达式求值,适合调试崩溃后变量
作用域
失效的场景
线程和进程控制命令怎么对应
LLDB 的线程模型更贴近 Dar
win
内核抽象,多线程调试时默认只显示当前线程状态;GDB 则倾向于汇总所有线程信息。
查看线程列表:
(GDB 是
),当前线程前有
标记
切换线程:
(GDB 是
)
单步进入函数:
(
或
),但若符号缺失,LLDB 默认不会跨汇编指令步进,需加
强制:
(GDB 的
对应
)
继续所有线程:
(
或
),但注意:LLDB 默认不暂停其他线程,GDB 默认会(可通过
模拟)
杀掉进程:
(GDB 是
),之后需重新
,不能复用旧进程上下文
LLDB 的表达式求值深度绑定 Clang,遇到模板特化、内联函数或未导出符号时,
很可能静默失败或返回
;这时候别硬试,先用
(带类型和地址)确认变量是否真在栈上,再决定是否切到寄存器或内存视角。
gdb ./a.outfile--lldb ./my_programlldb
(lldb) file ./my_programlldb ./my_program -- -arg1 -arg2-arg1error: unrecognized option '-arg1'--lldb ./my_program -- -arg1 -arg2target.exec-search-pathsdyld_library_pathrunLibrary not loadedbreak mainbreakpoint set -n mainb mainsettings set plugin.jit-loader.gdb-compat trueb source.cpp:42b 42breakpoint set -n foo -c 'x > 10'b foo if x > 10disable 1enable 1disable breakpoint 1breakpoint listinfo breakpointsbreakpoint set -o -n foo-oprintprintp/x $rax$register read raxreg r raxp/x $raxuse of undeclared identifier '$rax'memory read -f x -c 10 0x1000x/10x 0x1000mem r -fxw 0x1000wstd::vectorlibcxxcommand script import /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python/lldb/formatters/cpp/libcxx.pyp vecframe variablefr vpthread listinfo threads*thread select 2thread 2thread step-insteps-as -astepithread step-instprocess continueccontinueset scheduler-locking onprocess killkillrunpcouldn't get the valuefr v -R