编译时需要编译为调试模式,否则无法调试
命令行编译:g++ -g test.cpp -o test需要加上-g参数
CMakeLists.txt: set(CMAKE_BUILD_TYPE "Debug")或
cmake .. -DCMAKE_BUILD_TYPE="Debug"
readelf test | grep -i debug 查看是否有调试符号
也可以通过gdb test 运行是否有No debugging symbols found in test等输出信息
开始调试
运行时参数
运行环境
查看工作目录
程序的输入输出
断点设置
break lineNumber: 在当前文件指定行设置断点
break function:在当前文件指定函数设置断点,c++中key使用
class::function或function(type,type)格式来指定函数名称
break filename:lineNumber
break filename:function
break [args] if [cond]: 当【cond】这个运算为真时,设置中断点,args可以能是以上
任意一种形式;
rbreak regex: 使用正则表达式来寻找可能的函数,并在其进入点设置中断点;
break *address: 在程序运行的内存地址设置断点;
info break [n]: 查看断点信息, n表示断点号;
设置观察点
设置捕捉点(catchPoint)
维护停止点
断点菜单
break function: 若function重名或调用多次的话,则会列举出所有的
可能出现的详细位置,0-表示取消,1-表示所有设置断点,其他则设置相应的
断点,比如2 4 6;
恢复运行和单步调试
信号
线程
或是在某个特定的线程,break linespec thread threadno if expr
查看栈信息
backtrace(bt)
frame(f) n:切换栈
up n: 表示栈的上面移动n层,n可以省略,表示向上移动一层
down n:表示栈的下面移动n层,n可以省略,表示向下移动一层
info args: 打印当前函数参数及其值;
info locals: 打印当前函数中所有局部变量及其值;
info catch: 打印出当前函数中的异常处理信息;
查看源程序
搜索源代码
源代码的内存
查看运行时的数据