GDB基本调试

在linux进行程序调试通常有二种,一是通过printf打印日志,这也是非常方便的;另一种就是gdb调试。

进行gdb调试就如在vs中调试一样简单,通过gdb命令完全可以找到程序中任何错误。

下面贴出gdb命令,看一眼或者用一次不可能完全记住,需要多加练习,下面放上gdb调试的命令,遇到想不起来方便查看。

通过进行gdb调试的时候,在编译的时候需要加上-g,

如:gcc -g main.c -o main(注:-g 只是把原代码行数等记录在main里,然后通过索引到源代码中,所以调试的时候源代码必须存在)

然后运行:gdb main

在linux,可以通过help命令查看。

 

 

下面通过一个小程序学习gdb常用命令的使用:

程序文件为:gdbtest.c

源代码:

#include <stdio.h>

 int add(int a, int b)

{

    int sum=a+b;

    return sum;

 }

 

 int main(void)

 {

   int a=10;

   int b=15;

   int c=add( a, b);

   printf("result=%d\n",c);

   return 0;

 }

编译命令:gcc -g gdbtest.c -o main

调试:gdb main

下面就可以开始进行gdb调试了

 

GDB常用命令: 命令:strat 描述:开始执行程序,停止在main函数的第一句等待命令

命令:finish 描述:一直运行当前函数中返回的位置前,等待下一步命令

命令:quit 描述:退出gdb调试

命令:list/l   (无/函数/行号) 描述:查看代码,除了指定之外从第一行开始显示

命令:s/step、n/next 描述:执行下一句,区别是在有函数调用的时候s进入函数,而n不进入到函数里。vs调试的时候s=f11 n=f10

命令:bt/backtrace 描述:查看各级函数调用及其参数

命令:frame/f  帧编号(注:可以通过bt查看) 描述:选择栈帧 比如::f 0

命令:info/i locals  描述:查看当前栈帧中的局部变量的值

命令:print/p 表达式 描述:打印表达式的值,可以通过表达式去修改变量的值或者调用函数 比如:p sum

命令:set var 变量 描述:修改变量的值 比如:set var sum=0

命令:break/b 行号/函数 描述:在某一行或者函数设置断点

命令:break 行号/函数 if条件 描述:设置条件断点

命令:info/i breakpoints 描述:查看当前设置的断点

命令:disable breakpoints 断点号 描述:禁用此断点 断点号可以通过info breakpoints查看

命令:enable breakpoints 断点号 描述:启用此断点 断点号可以通过info breakpoints查看

命令:delete breakpoints 断点号 描述:删除断点,断点号可以通过info breakpoints查看

命令:display 变量 描述:跟踪查看此变量,只要停止都显示次变量的值

命令:undisplay 跟踪显示号 描述:取消此跟踪

命令:continue/c 描述:继续执行到下一个断点或者观察点

命令:run/r 描述:从头开始执行程序

命令:watch 变量 描述:设置观察点 一般都是break在要观察变量处设置断点,用run 执行到断点 使用watch 设置观察点 使用continue看观察点是否变化,当发生变化时停止

命令:info/i watchpoints 描述:查看当前设置的观察点

命令:x 变量 描述:从某个位置开始打印存储单元的内容,全部当字节看,不区分属于哪个变量比如x/7b input  7代表7组 b是一个字节代表一组

 

这里列举了常用的调试gdb命令,还有很多命令比如多线程调式之类的,可以参考下面网址,里面涵盖了所有的gdb命令:

http://wangcong.org/articles/learning-gdb.cn.html

 

posted @ 2013-11-15 13:59  蓝夜  阅读(339)  评论(0编辑  收藏  举报