GDB调试技巧

工具程序gdb是GNU调试器。为了能调试程序,编译时必须指定GCC的-g选项将源码与可执行代码联系起来。

将程序载入调试器

fibonacci.c

int current;
int next;
int nextnext;

void setstart(void) {
    current = 0;
    next = 1;
}

void calcnext(void) {
    nextnext = current + next;
    current = next;
    next = nextnext;
}

int main(int argc, char *argv[]) {
    int i;
    setstart();
    for (i = 0; i < 20; i++) {
        printf("%2d: %d\n", i+1, current);
        calcnext();
    }
    return(0);
}
$ gcc -g fibonacci.c -o fibonacci \\ -g选项使得编译后的程序包含调试信息

breakpoints(断点)

当进程执行时,会中断在断点对应的行上。可根据行号、程序名、内存地址设置断点。

(gdb) break 20             // 设置断点(在行号为20处)
            Breakpoint 17 at 0x8048479: file fibonacci.c, line 20.
(gdb) break main           // 设置断点(在main函数开始处)
            Breakpoint 18 at 0x804846a: file fibonacci.c, line 18.
(gdb) info address main    // 查看地址(在main函数开始处)
            Symbol "main" is a function at address 0x8048461.
(gdb) break *0x8048461     // 设置断点(在0x8048461地址处)
            Breakpoint 19 at 0x8048461: file fibonacci.c, line 16.
(gdb) info breakpoints     // 查看断点
            Num     Type            Disp Enb Address    What
            17      breakpoint      keep y   0x08048479 in main at fibonacci.c:20
            18      breakpoint      keep y   0x0804846a in main at fibonacci.c:18
            19      breakpoint      keep y   0x08048461 in main at fibonacci.c:16
(gdb) ignore 5 3           // 忽略断点(忽略Num=5的断点3次触发)  
            Will ignore next 3 crossings of breakpoint 5.
(gdb) delete 5             // 删除断点(断点列表中Num=5)
(gdb) clear main           // 清除断点(main函数开始处)
(gdb) clear 20             // 清除断点(在行号为20处)    
(gdb) enable 5   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值