您的位置:首页 > 其它

GDB一些命令的简单介绍

2013-07-17 21:22 232 查看
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调试多线程程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: