gdb调试步骤

发布时间 2023-10-31 16:27:03作者: ray963
  1. 编译程序时包含调试信息

    在编译你的程序时,确保使用 -g 标志以包含调试信息。

    g++ -g source_code.cpp -o program
    
  2. 启动 GDB

    在终端中,使用 gdb 命令启动 GDB

    gdb program
    
  3. 设置断点

    使用 break 或者b命令设置断点

    (gdb) b function						#指定函数设置断点
    (gdb) b filename.cpp:line_number		#指定行设置断点
    (gdb) b &变量名						  #指定变量的地址处设置断点,断点触发后,可以结合print查看变量信息
    
  4. 运行程序

    使用 run 命令启动程序

    (gdb) run
    
  5. 单步执行

    使用 stepnext命令来逐行单步执行代码

    (gdb) step		#进入函数内部
    (gdb) next		#一步完成函数调用 
    (gdb) continue  #恢复程序运行
    
  6. 查看变量

    使用 print 命令来查看变量的值

    (gdb) print variable_name
    (gdb) print expression
    
  7. 查看堆栈跟踪

    使用 bt 命令来查看当前的调用堆栈,这将显示函数的调用关系。

    (gdb) bt
    
  8. 设置条件断点

    使用 break if 命令可以在满足特定条件时触发断点。

    (gdb) b your_function if condition
    如:b main.cpp:127 if cnt==10
    
  9. 删除断点

    使用 delete 命令来删除不再需要的断点。

    (gdb) d breakpoint_number     #删除指定编号断点
    (gdb) clear                   #删除程序中所有断点
    (gdb) clear 行号               #删除此行断点
    (gdb) clear 函数名              #删除函数中所有断点
    (gdb) disable                  #让某个断点暂时失效
    
  10. 继续执行

    使用 continue 命令来让程序继续执行,直到下一个断点或程序结束。

    (gdb) continue
    
  11. 退出 GDB

    当你完成调试时,可以使用 quit 命令退出 GDB。

    (gdb) quit
    

补充:gdb监视

(gdb) watch *地址		        #当该地址发生变化时触发断点
(gdb) watch var		         #当var值发生变化时触发断点
(gdb) watch (condition)      #当条件符合时触发断点

list查看源代码

(gdb) list 文件名:行号         #查看指定文件的特定行号源代码
(gdb) list function			 #查看函数源代码