GDB一些命令的简单介绍

来源:互联网 发布:铜排折弯算法 编辑:程序博客网 时间:2024/06/05 01:59

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

1. 主要功能:

启动你的程序,可以按照你的自定义的要求随心所欲的运行程序;
可让被调试的程序在你所指定的调置的断点处停住;
当程序被停住时,可以检查此时你的程序中所发生的事;
动态的改变你程序的执行环境;
更详细的大家可以百度、谷歌一下

2. 我们先讲一下gdb的暂停机制:

跟断点相关的point主要有三种:
断点:通知GDB在程序中的特定位置暂停执行
监视点:通知GDB当特定内存的值发生变化时暂停执行
捕获点:通知GDB当特定事件发生时暂停执行
其中断点(breakpoint)和监视点(watchpoint)是需要用户手动加的,捕获点是GDB根据加的断点或是监视点去捕获的。


2.1 如何加断点

break ——在当前文件的当前位置加断点
break line_num ——在当前文件的第line_num行加断点
break filename:line_num ——在指定的文件filename中的第line_num行加断点
break function_name ——在函数function_nam的位置上加断点
break filename:function_name ——在指定的文件filename中的函数function_name加断点

查看断点信息:
info break

2.2 其他类型的断点

2.2.1 条件断点:满足某个条件程序才会暂停执行

有两种方式加条件断点:
break 10
condition 1 i==20
等价于 
break 10 if i==20

2.2.2 临时断点:断点最多只能被捕获一次

加临时断点的命令是tbreak,命令格式和break一样。


2.3 失效或删除断点

2.3.1 生、失效断点

失效命令是disable,具体格式:
disable ——表示使所有的断点失效
disable  breakpoint_list ——表示使指定的断点失效
生效命令是enable,具体格式:
enable ——表示使所有的断点生效
enable breakpoint_list ——表示使指定的断点失效


2.3.2 删除断点

删除断点有两个命令,delete和clear,具体格式如下:
delete:
delete ——表示删除断点
delete breakpoint_list ——表示删除指定的断点
clear:
clear ——删除将执行的下一个指令处的断点
clear line_num /function_name ——删除指定位置的断点

2.4 恢复断点

总共以下几种:
单步执行:可以用next或是step命令,具体区别可以查一下;
使用continue恢复程序运行;
使用finish恢复程序执行:直接将当前函数执行到返回为止;
使用until恢复程序的执行:与for循环相关,直接执行完for循环


2.5 断点编程

断点命令列表:
commands breakpoint_num
>print n
>…
>end
定义一个命令:
define cmd_name
>…
>end


2.6 监视点:监视点可以监视某段内存的情况

具体命令格式为:
watch i ——当i的值有变动的时候,程序会暂停执行
watch (i>10) ——当i的值大于10的时候,程序会暂停执行


3. 检查和设置变量

print var_name ——打印变量var_name,查看该变量的值
set var_name ——设置变量var_name的值
display var_name ——在断点处显示变量var_name的值


刚才忘了说这2个命令,有兴趣的可以看下

info reg ——查看当线程的寄存器信息
disassemble function_name ——查看某函数的汇编实现


以上是一些gdb调试的简单命令,如果需要用GDB调试core文件,或是多线程,请参看下面两篇博客:

GDB调试core文件

GDB调试多线程程序

原创粉丝点击