GDB笔记(一):GDB调试基础
gdb调试基本知识
调试器指示的是将要执行的代码行
只有在编译时拥有调试符号(gcc -g)的程序才能在调试时看到源代码
同一行上有多个断点时,GDB仅中断在断点号最小的那个断点上
断点可以设置在同一程序的不同文件中
在任何给定时间,GDB只有一个焦点,即当前“活动”的文件
源文件改变后,断点发生移动,但是断点属性的行号不变
断点(breakpoints)的分类
断点(break):程序中的特定位置,可以设置在不同的文件中
临时断点(tbreak):中断一次后自动删除
条件断点(break if):满足特定条件后才会中断
监视点(watch):特定的内存位置
捕获点(catch):特定事件
断点属性(info breakpoints)
Num Type Disp Enb Address What 1 breakpoint keep y 0x080485b9 in main at ../src/01_INS.c:71 2 watchpoint keep y num_y ...
Num: 断点号
Type: 断点类型(断点、监视点、捕获点)
Disp: 断点部署(该断点下次中断后如何处理该断点?)
keep:保持不变
del: 删除该断点
dis: 禁用该断点
Enb: 断点当前启用状态
What: 断点位置
断点的操作:
设置断点:
break [filename:]function
break [filename:]line_number
删除断点:
delete breakpoint_list
clear [filename:]function
clear [filename:]line_number
禁用/启用:
disable/enable 无参数情况下将会禁用/启用所有断点
disable breakpoint_list
enable breakpoint_list
enable once breakpoint_list 该断点下次中断后自动禁用
移动断点:
GDB中移动断点的唯一方法是删除断点后在新的位置再放置一个一模一样的断点
但是DDD中只需要托拽断点符号就能移动到新位置,并且保留该断点的所有属性
恢复执行
step和next
step和next在Eclipse中分别对应step into和step over命令
根据自顶向下调试程序的原则,应该尽量使用next进行调试,当发现该函数执行后结果与预期不符,才转用step进入函数内部进行调试。
continue
该命令恢复被GDB中断的程序继续运行,直到遇到断点或者程序结束。
用法: continue [n]
参数n使GDB忽略接下来的N个断点。
continue对应Eclipse中的Resume
finish
finish命令恢复程序的运行,并返回到上层函数后停止
finish对应Eclipse中的step return
until
无参的until命令恢复程序的运行,并执行完循环的其余部分
until官方定义:执行程序,知道到达当前循环体外的下一行源代码
实际上,由于高级语言到机器语言在顺序上并不一定完全对应,until在到达内存地址比当前高的机器指令后就会停止
用法:
until [filename:]line_number
until [filename:]function
以上两种用法在到达指定的行号或者函数后即停止。