gdb

一、用gdb调试程序

    Linux中包含一个很强大的调试工具GDB,可以用它来调试C、C++程序。 要使用GDB进行调试,在编译程序的时候需要加入-g选项。

    使用流程

     (1)gcc -g test.c -o test

       (2) 启动gdb:gdb test

       (3)在main函数处设置断点:break main

       (4)运行程序:run 

/*此程序实现累加求和
  gcc -g test.c -o test
  ./test 3
  结果为6=1+2+3
*/

#include <stdio.h>/* 用于printf*/
#include <stdlib.h>/*用于malloc*/
/* 声明函数sum()为static int类型 */
static int sum(int value);
/* 用于控制输入输出的结构 */
struct inout{
	int value;
	int result;
};
int main(int argc, char *argv[]){
	
	struct inout *io = (struct inout*)malloc(sizeof(struct inout));													/*申请内存*/
	
	if(NULL == io)								/*判断是否成功*/
	{
		printf("申请内存失败\n");					/*打印失败信息*/
		return -1;								/*返回-1*/
	}
		
	if(argc !=2)								/*判断输入参数是否正确*/
	{
		printf("参数输入错误!\n");				/*打印失败信息*/
		return -1;								/*返回-1*/
	}	
	
	io->value = *argv[1]-'0';						/* 获得输入的参数 */
	io->result = sum(io->value);					/* 对value进行累加求和 													*/
	printf("你输入的值为:%d,计算结果为:%d\n",io->value,io->result);
	return 0;
}
/* 累加求和函数 */
static int sum(int value){
	int result = 0;
	int i = 0;
	
	for(i=0;i<=value;i++)							/* 循环计算累加值 */
		result += i;
	
	return result;								/*返回结果*/
}

1、启动gdb

        (1) gdb test

 或 (2)  gdb

              file test

2、设置输入参数的值: set args 参数值1 参数值2 ....

                                     如set args 3 表示向可执行文件test传入的参数值为3

      查看参数值: show args

3、列出可执行文件对应的源文件的代码: list 开始的行号  或 list 函数名 或 list line1,line2 (列出line1-line2之间的代码)

                                     如 list 7 ,表示从第7行开始列出代码,每次按Enter键后顺序向下列出代码。

4、设置断点:GDB会在执行该位置的代码之前停下来

                          break 行号

                          break 文件名:行号    //在指定文件的指定行添加断点

                          break 函数名            //在某函数的入口处添加断点

                       如 b 38  ,在第38行设置断点。

                          info break //查看所有设置的断点

                          delete 断点编号  //删除某个断点

 5、运行程序:run    //程序运行到断点,会在断点处停止运行

 6、显示变量的值

             程序运行到第38行断点的时候。会中断运行等待进一步的指令。这时可以进行一系列的操作,其中display可以显示变量的值。

                       display i          //每次停止时显示变量i的值

                       display result   //每次停止时显示变量result的值

                       continue    //继续运行

                       continue    //继续运行

  7、修改变量的值

             set result=6   //修改result的值为6

             continue        //继续运行

  8、退出GDB

              q

9、打印数据

           打印变量的值:print 变量名

           计算函数调用的返回值: print sum(3) 

           打印一个结构中各成员的值: print *io         //打印io结构中各成员的值

10、查看变量类型

                   whatis + 变量名

                或ptype + 变量名

  11、单步调试

                    next 不进入被调用函数的函数体

                    step 会进入被调用函数的函数体

12、continue  继续执行到程序结束或下一个断点

13、backtrace  列出函数的调用过程(从最近到最远)

14、多线程thread

            info thread 列出当前线程的线程号

            thread id    进入需要调试的线程

15、打印指定函数的汇编代码 

                  disassemble + 函数名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值