怎样在Linux上配置C++调试工具
调试C++程序需安装编译器(生成带调试信息的可执行文件)、调试器(核心调试工具)及辅助工具(内存/性能分析)。
g++
)或Clang(clang++
),多数Linux发行版默认包含。若未安装,可通过包管理器安装(如Ubuntu/Debian用sudo apt install g++
,Fedora用sudo dnf install gcc-c++
)。sudo apt install gdb
,Fedora用sudo dnf install gdb
,Arch Linux用sudo pacman -S gdb
。sudo apt install valgrind
);-fsanitize=address
选项);-fsanitize=thread
选项)。调试信息是GDB等工具定位变量、函数的关键,编译时需添加**-g
选项**。例如:
g++ -g -o my_program my_program.cpp # 生成带调试信息的可执行文件my_program
若使用CMake构建项目,需在CMakeLists.txt
中设置set(CMAKE_BUILD_TYPE Debug)
,再执行cmake .. && make
。
GDB是命令行调试工具,以下是核心操作流程:
gdb ./my_program
(加载可执行文件)。break main
:在main
函数开头设置断点;break my_program.cpp:20
:在第20行设置断点;break MyClass::myMethod
:在类的成员函数处设置断点。run
(无参数)或run arg1 arg2
(带命令行参数)。next
(或n
):执行下一行代码,不进入函数内部;step
(或s
):执行下一行代码,进入函数内部(用于跟踪函数逻辑)。print variable_name
(或p variable_name
):打印变量的当前值(如p x
打印变量x
的值);info locals
:显示当前作用域的所有局部变量;info args
:显示当前函数的参数列表。backtrace
(或bt
):显示程序的调用栈(从当前函数到main
函数的调用路径),用于定位函数调用顺序。continue
(或c
):继续执行程序,直到遇到下一个断点或程序结束。quit
(或q
)。IDE提供图形化界面,简化调试流程,适合大型项目。常用IDE及配置方法:
program
(可执行文件路径)、args
(命令行参数)、preLaunchTask
(编译任务,如g++ -g -o my_program my_program.cpp
);Executable
(可执行文件路径)、Working directory
(工作目录);valgrind --leak-check=full ./my_program
(--leak-check=full
显示详细的内存泄漏信息)。-fsanitize=address
选项,运行程序即可(如./my_program
),ASan会在程序崩溃时输出详细的错误信息(如缓冲区溢出位置)。-fsanitize=thread
选项,运行程序即可(如./my_program
),TSan会输出数据竞争的具体信息(如线程冲突的位置)。-g
选项,否则调试器无法获取变量、函数等信息;break
不能写成Break
);g++ -g
)正确生成带调试信息的可执行文件;