GDB是由GNU开源组织发布的UNIX/LINUX操作系统下基于命令行的强大程序调试工具。对于在Linux下工作的C程序员来说,Gdb是一个必不可少的工具。
00-1010对于调试C/C程序,需要在编译前添加-g选项:
$g -g hello.cpp -o hello调试可执行文件:
programprogram是您的可执行文件,通常位于当前目录中。
调试核心文件(核心是非法执行程序后核心转储后生成的文件):
$gdb程序核心转储文件
$gdb程序核心。11127调试服务程序:
$gdb程序PID
$gdb hello 11127如果你的程序是一个服务程序,你可以指定服务程序运行时的进程ID。Gdb会自动附加并调试它。应该在PATH环境变量中搜索程序。
00-1010,启动gdb后,进入交互模式,通过以下命令完成程序的调试;注意高频使用的命令通常有缩写。熟练使用这些缩写可以提高调试效率。
00-1010RUN:缩写为R,其功能是运行程序。当遇到断点时,程序将在断点处停止运行,等待用户输入下一个命令。Continue(缩写C):继续执行直到下一个断点(或运行结束)next:(缩写N),单步跟踪程序,遇到函数调用时,不要进入这个函数体;这个命令和step的主要区别是,当step遇到用户自定义函数时,会单步执行函数运行,而next直接调用函数,不会进入函数体。Step(缩写为S):分步调试。如果有函数调用,输入函数;与命令n不同,n是被调用函数的直到:当SDDW厌倦了循环体中的单步跟踪时,这个命令可以运行程序,直到退出循环体。直到行号:运行到某一行,不仅仅是跳出循环完成:运行程序直到当前函数返回,函数返回时打印栈地址、返回值、参数值。调用函数(参数):调用程序中可见的函数并传递“参数”,如:call gdb_test(55)quit:缩写为q,Exit gdb
1.1. 启动gdb
break n(缩写为b n):在第n行设置断点(可以自带代码路径和代码名称:b oagupdate . CPP 3360578)b fn1 if a & gt;b:条件断点设置break func(break缩写为b):在func()的入口设置断点,例如break cb_buttondelete断点号n:删除第n个断点禁用断点号n:暂停第n个断点启用断点号n:打开第n个断点清除行号n:清除第n个断点信息b(info breakers):显示当前程序的断点设置删除断点。清除所有断点:1.2. gdb交互命令
list:缩写为L,其功能是列出程序的源代码,默认情况下一次显示10行。List行号:显示当前文件中行号周围的10行代码,例如list 12list函数名:显示函数名所在函数的源代码,例如list mainlist:如果没有参数,将输出以下内容作为最后一个list命令。运行
print expression:缩写为p,其中“expression”可以是当前正在测试的任何程序的有效表达式,例如当前正在用C语言调试的程序,那么“expression”可以是任何C语言的有效表达式,包括数字、变量甚至函数调用。a:将显示整数a的值。打印a:a中的值将增加1。并显示打印名称:将显示字符串名称print gdb_test(22)的值:以整数22为参数调用gdb_test()函数print gdb_test(a):以变量a为参数调用gdb_test()函数display表达式:在单步操作中非常有用。使用display命令设置表达式后,将在每个单步指令后立即设置。例如,显示awatch表达式:设置观察点。一旦被监控表达式的值发生变化,gdb将强制终止正在调试的程序。比如watch awhatis:查询变量或函数信息函数:查询函数扩展信息局部变量:显示当前栈页设置断点
的所有变量,其中/bt:当前运行的栈列表;Backtrace向上/向下显示当前调用堆栈,以更改堆栈显示的深度。set args参数:指定运行时参数show args:检查set参数信息程序:检查程序是否正在运行、进程号以及被挂起的原因。查看源代码
布局:用于拆分窗口,您可以在测试时检查代码:布局src:显示源代码窗口布局asm:显示反汇编窗口布局regs:显示源代码/反汇编和CPU寄存器窗口布局拆分:显示源代码和反汇编窗口Ctrl:刷新窗口00-1010