Linux下常见的GDB调式用法

关于gdb

===========================

1,编译的时候,要加上-g : gcc debugme.c -o debugme -g

2,使用gdb来启动待调试代码:

gdb ./debugme

3,列出待调试代码:

l

l 10

l 1,30

4,设置断点:

b 10 (在程序的第10行,设置一个断点)

b 20 if i>= 5 (在程序的第20行,设置一个断点,并且只有当i>=5时才停下来)

info b (查看所设置的断点的信息)

delete N (删除第N号断点)

disable N (禁用第N号断点)

enable N (启用第N号断点)

5,启动待调试代码:

run

r

r abcd 1234

 

6,查看相关的变量、栈的信息:

print i

p i

display i

backtrace full (查看当前进程的栈的信息)

bt full

whatis i (查看变量i的类型)

 

7,单步调试

next (单步运行:将函数调用看作一步)

n

n 10

 

step (单步运行:会进入函数调用)

s

s 10

 

8,继续运行代码:

continue (让进程持续运行,直到遇到断点,或者进程退出为止)

c

 

9,查看变量值:

p+变量值

 

10:查看函数堆栈:

bt

11:设置参数

set args xxx

编写一个C语言源程序bugging.c如下:

#include <stdio.h>
    static char buf[250];
    static char *string;

    int main()
    {
        printf("please input a string\n");
           gets(string);
           printf("\nyou input string is %s\n",string);
    }


1、用GCC编译该程序,指令如下:

2、 运行程序,指令如下:

3、结果如下:

4、GDB调试

 

最常见的错误:非法内存访问(段错误 / segmentation fault)

该种错误的调试步骤:

============================

1,编译: gcc debugme.c -o debugme -g

2,取消系统对core文件大小的限制:

ulimit -c unlimited

3,让有段错误的代码去死,产生一个core文件

./debugme

4,让gdb帮我们看看在哪里出错:

gdb ./debugme core

 

注:

gdb不一定100%地能找到错误的地方,如果找不到,还是要自己一步一步地找。我们要根源上写代码的时候就要避免出现此类错误,预防大于治疗。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值