如何编译SQLite3源码并在VSCode中调试(Mac M2环境)
调试SQLite3断点无法保留的解决步骤
1. 确认可执行文件是否包含调试符号
先检查编译出的sqlite3是否带有调试信息,在终端执行:
file sqlite3
如果输出里没有"with debug info"或debugging symbols present,说明编译时未生成调试符号。此时需:
- 执行
make clean清理旧编译产物 - 重新运行configure,明确指定调试与禁用优化参数:
(注:SQLite默认的./configure --disable-amalgamation --enable-debug --disable-optimizations--debug可能不够明确,添加--disable-optimizations可避免O2级优化导致断点失效,--enable-debug确保强制生成调试符号) - 重新编译:
make sqlite3
2. 检查CodeLLDB插件兼容性
Mac M2为arm64架构,需确保VSCode的CodeLLDB插件适配该架构:
- 打开VSCode扩展面板,搜索CodeLLDB,安装/更新至最新稳定版
- 重启VSCode后再次尝试调试
3. 调整launch.json配置
修改配置添加关键参数,尝试解决路径或启动逻辑问题:
{ "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug SQLite3", "program": "${workspaceRoot}/sqlite3", "cwd": "${workspaceRoot}", "stopAtEntry": true, // 启动后立即停在入口,避免程序直接运行完成 "sourceFileMap": { // 若编译时源码路径与VSCode工作区路径不一致,添加路径映射 "/实际编译时的源码路径": "${workspaceRoot}" } } ] }
- 开启
stopAtEntry: true后,启动调试会停在main函数入口,此时手动设置断点,观察是否能保留 - 若源码路径存在差异,通过
sourceFileMap映射纠正LLDB的源码查找路径
4. 排查源码文件差异问题
SQLite部分源码文件为自动生成(如parse.c、vdbe.c),这些生成文件与仓库中的模板文件(如parse.y)不一致:
- 确保断点设置在实际参与编译的
.c文件上,而非.y/.h等模板文件 - 若断点设在生成的源码文件,确认该文件未在编译时被优化移除
5. 用LLDB终端直接验证
跳过VSCode,用终端LLDB调试确认问题根源:
lldb ./sqlite3 (lldb) breakpoint set --file main.c --line 100 // 替换为目标文件和行号 (lldb) run
如果终端LLDB能成功命中断点,说明问题出在VSCode配置或插件;若终端也无法设置断点,则回到步骤1重新处理编译产物。
内容的提问来源于stack exchange,提问作者CSRd
相关产品推荐
相关产品推荐

