-
编译程序时包含调试信息:
在编译你的程序时,确保使用
-g
标志以包含调试信息。g++ -g source_code.cpp -o program
-
启动 GDB:
在终端中,使用
gdb
命令启动 GDBgdb program
-
设置断点:
使用
break
或者b
命令设置断点(gdb) b function #指定函数设置断点 (gdb) b filename.cpp:line_number #指定行设置断点 (gdb) b &变量名 #指定变量的地址处设置断点,断点触发后,可以结合print查看变量信息
-
运行程序:
使用
run
命令启动程序(gdb) run
-
单步执行:
使用
step
和next
命令来逐行单步执行代码(gdb) step #进入函数内部 (gdb) next #一步完成函数调用 (gdb) continue #恢复程序运行
-
查看变量:
使用
print
命令来查看变量的值(gdb) print variable_name (gdb) print expression
-
查看堆栈跟踪:
使用
bt
命令来查看当前的调用堆栈,这将显示函数的调用关系。(gdb) bt
-
设置条件断点:
使用
break if
命令可以在满足特定条件时触发断点。(gdb) b your_function if condition 如:b main.cpp:127 if cnt==10
-
删除断点:
使用
delete
命令来删除不再需要的断点。(gdb) d breakpoint_number #删除指定编号断点 (gdb) clear #删除程序中所有断点 (gdb) clear 行号 #删除此行断点 (gdb) clear 函数名 #删除函数中所有断点 (gdb) disable #让某个断点暂时失效
-
继续执行:
使用
continue
命令来让程序继续执行,直到下一个断点或程序结束。(gdb) continue
-
退出 GDB:
当你完成调试时,可以使用
quit
命令退出 GDB。(gdb) quit
补充:gdb监视
(gdb) watch *地址 #当该地址发生变化时触发断点
(gdb) watch var #当var值发生变化时触发断点
(gdb) watch (condition) #当条件符合时触发断点
list查看源代码
(gdb) list 文件名:行号 #查看指定文件的特定行号源代码
(gdb) list function #查看函数源代码