您的位置:首页 >Ubuntu C++调试有哪些方法
发布于2026-04-25 阅读(0)
扫一扫,手机访问

在 Ubuntu 上调试 C++ 程序,其实选择相当丰富。从最底层的命令行工具到现代化的集成环境,都能帮你精准定位问题。简单来说,可以归为这么几类:
无论选择哪个工具,第一步都至关重要:编译时务必加入调试信息。使用 -g 选项是必须的;为了获得最直观的调试体验,通常建议同时关闭编译器优化,比如加上 -O0。一个标准的编译命令是这样的:g++ -g -O0 main.cpp -o main。
接下来,看看两大命令行调试器的基本操作流程:
gdb ./mainbreak main 或 break main.cpp:10run [args]next(跳过函数调用)/ step(进入函数)continueprint varbacktrace(简写 bt)quitlldb ./mainb main 或 breakpoint set --file main.cpp --line 10runn / scprint expr 或 frame variablebtquit有个好消息是,LLDB 和 GDB 的命令存在大量一一对应的关系,从 GDB 转过来几乎没什么成本。不过,在应对复杂项目或需要脚本化调试任务时,LLDB 的脚本能力通常被认为更灵活一些。
对于追求效率的开发者,图形化界面无疑是更友好的选择。
Ctrl+Shift+P,输入并选择 “Configure Default Build Task”,然后选择 “g++ build active file”。这会在项目下生成一个 tasks.json 文件。F5,选择环境 “C++ (GDB/LLDB)”,这会生成 launch.json 文件。你需要关注的配置字段包括 program(可执行文件路径)、args(程序参数)、MIMode(指定 gdb 或 lldb)、miDebuggerPath(调试器路径)和 preLaunchTask(启动调试前运行的任务)。F5 启动调试,就可以使用顶部的调试工具栏进行单步执行、继续、查看变量和调用栈了。掌握了基础,再来看看那些能解决棘手问题的进阶手段。
ulimit -c unlimited 取消 core 文件大小限制。当程序崩溃后,会在当前目录生成一个(通常名为 core 的)转储文件。gdb ./main core 或 lldb ./main -c core 加载转储文件。进入后,立即使用 bt 查看崩溃时的调用栈,再结合 frame 和 print 命令定位具体问题。platform select remote-android;platform connect unix-abstract-connect:///data/local/tmp/debug.sock。attach 。settings set target.source-map <编译时源码路径> <本地源码路径>。target symbols add <未剥离的 .so 文件>。之后就可以像本地调试一样设置断点和查看变量了。b main if some_var == 10。你甚至可以在运行时动态求值或修改变量:expr some_var = 42。-O2/-O3)会进行大量优化,可能导致变量被优化掉、单步执行顺序混乱。因此,调试时优先使用 -O0 -g。如果必须在优化下调试,可以尝试配合 -fno-omit-frame-pointer 等编译器选项来提升可调试性。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9