gdb的基本使用方法

我们调试程序,经常用到gdb来进行调试程序。今天有空讲一下他的基本用法。也让自己作个记录

sort.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DATA_ARRAY_LENGTH     12


int shell_sort(int *data, int length) {

   int gap = 0;
   int i = 0, j = 0;
   int temp;

   for (gap = length / 2;gap >= 1; gap /= 2) {

      for (i = gap;i < length;i ++) {

         temp = data[i];
         for (j = i-gap;j >= 0 && temp < data[j];j = j - gap) {

            data[j+gap] = data[j];
            
         }
         data[j+gap] = temp;
      }

   }

   return 0;
}


int main() {

   int data[DATA_ARRAY_LENGTH] = {23, 64, 24, 12, 9, 16, 53, 57, 71, 79, 87, 97};
   int i = 0;
    shell_sort(data, DATA_ARRAY_LENGTH);

    for (i = 0;i < DATA_ARRAY_LENGTH;i ++) {
        printf("%4d", data[i]);
    }
    printf("\n");

}
gcc -g  -o sort sort.c

基本常用命令

gdb 常用命令
(1) gdb 可执行文件 : 表示对某个文件进行调试
(2) b 函数名/行数  :  在某个函数名或行数前设置断点
(3) run/r          : 表示开始运行,如果是正在调试的程序的话,表示再次进行调试
(4) n/next         : 表示执行下一行语句
(5) l/list         : 列出源码默认10行(当前位置的上下共10行)
    list 行号      : 列出行号上下共10行的源码
    list 函数名    : 列出函数名上下共10行的源码
(6) s/step         : 表示单步执行,进入函数
(7) p /x 变量名    : 按16进制输出变量的值
      /d           : 按10进制
      /o           : 按八进制
(8) set var 变量名=值 : 设置变量的值
(9) bt(backtrace)  : 查看各级函数调用及参数,简写bt
(10)q/quit         : 退出
(11)finish         : 连续运行到当前函数返回为止,然后停下来等待命令
(12)continue/c     : 跳转到下个断点,或者跳转到观察点
(13)ptype 变量名   : 可以查看变量的类型,简写为pt
(14)wat
    作用:一般用来观察某个变量/内存地址的状态(也可以是表达式),
          如可以监控该变量/内存值是否被程序读/写情况。
    有三种方法:
    1.watch expr(指定变量/内存地址/表达式)
    一旦expr的值有变化时,将停住程序。
    2.rwatch expr
    当expr被读时,停住程序。
    3.awatch expr
    当expr被读或被写时,停住程序。
    watch使用步骤:
        1. 使用break在要观察的变量所在处设置断点;
        2. 使用run执行,直到断点;
        3. 使用watch设置观察点;
        4. 使用continue观察设置的观察点是否有变化。
(15)start            : 开始执行程序,停在main函数第一行语句前面等待命令
(16)info watchpoints : 列出所有观察点
    info breakpoints : 查看当前设置的所有断点
(17)d/delete [breakpoinsts num] [rang...]
    d/delete         : 删除所有断点
    d/delete num     : 删除breakpoints为num的断点
    d/delete num1-num2 : 删除breakpoints为num1-num2的断点
(18)enable num       : 启用num号断点
(19)disable num      : 关闭num号断点
(20)u/until          : 结束当前循环
gdb --args ./sort arg1 arg2 可以带参数调试 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值