gdb学习与使用

GDB基础知识

1、GDB是The GNU Project Debugger 的缩写,是Linux下功能全面的调试工具,GDN支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段,在linux环境软件开发中,GDN是主要的程序调试工具,主要用来调试C和C++程序。

2、GDB的常用命令:

1| (gdb)file file_name   // 加载被调试的可执行程序文件
2| (gdb)attach pid       // 关联制定进程进行调试
3| (gdb)list/l           // 列出当前位置之后的10行代码
4| (gdb)run/r            // 运行被调试的程序,如果没有断点,则执行整个程序,反之,第一个断点处停止
5| (gdb)continue/c       // 继续执行被调试程序,直至程序结束或者下一个断点
6| (gdb)break/b 行号|函数名|代码地址   // 设置断点
7| (gdb)backtrace/bt            // 列出调用栈
8| (gdb)step/s           // 执行一行源代码(单步跟踪),有函数则进入
9| (gdb)next/n           // 执行一行源代码(单步跟踪), 有函数直接执行,不进入函数
10| (gdb)print/p          // 显示指定变量(临时变量和全局变量)
11|(gdb)quit/q           // 退出gdb
12|(gdb)info             // 打印详细信息
13|(gdb)x                // 打印内存信息
14|(gdb)delete/d         // 删除断点
15|(gdb)kill             // 终止正在调试的程序

3、例如test.c程序调试:

#include <stdio.h>
#include <stdlib.h>

int sum(int arg1, int arg2) {
  int result = 0;
  result = arg1 + arg1;
  return result;
}
int main(int argc, char *argv[]) {

  int i, value, result, total;
  total = 0;
  value = 0;
  for(i = 0; i < 10; i++) {
    result = sum(i, value);
    total += result;
    value++;
  }
  printf("value:%d  and total : %d\n", value, total);
  return 0;
}

1)执行  gcc -g test.c -o test    生成可执行程序

2)载入程序 gdb test

$ gdb test

GNU gdb (GDB) Red Hat Enterprise Linux (7.2-56.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/work/tmp/test.c...done.
(gdb)

3)开始使用gdb基础命令

(gdb) b 14       // 在14行打一个断点
Breakpoint 2 at 0x4004ff: file test.c, line 14.

(gdb) r     // 开始运行载入的程序
Breakpoint 1, main (argc=1, argv=0x7fffffffdf28) at test.c:14
14	  for(i = 0; i < 10; i++) {

(gdb) n     // 程序执行下一步, 不进入函数
15	    result = sum(i, value);

(gdb) p result    // 打印变量
$1 = 0

(gdb) n           // 程序执行下一步
16	    total += result;
(gdb) n           // 程序执行下一步
17	    value++;
(gdb) n           // 程序执行下一步
14	  for(i = 0; i < 10; i++) {  
  
(gdb) list     // 显示行数
12	  total = 0;
13	  value = 0;
14	  for(i = 0; i < 10; i++) {
15	    result = sum(i, value);
16	    total += result;
17	    value++;
18	  }
19	  printf("value:%d  and total : %d\n", value, total);
20	  return 0;
21	}



(gdb) continue     // 继续执行函数
Continuing.
value:10  and total : 90

学习参考:http://c.biancheng.net/gdb/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值