gdb之初识

1. gdb是什么
以前在windows下开发的时候一直都使用的windows的编辑器(VS), 调试则使用的IDE自带的调试手段,
F9: 设置断点
F5: 执行直到遇到断点
F10: 单步执行
F11: 单步且遇到函数则进入函数
shift+F5: 跳出调试模式
只记录基础的,如果以后再去windows上开发则做补充。
gdb是Linux调试的工具,灰常强大。 关于gdb这个版块不是一次直接写完,先把用的部分写出来一点,以后用到就补充。

2. gdb基础使用
# vi one.c
#include <stdio.h>

void fun1(int ac)
{
    printf("in fun1, the ac is %d\n", ac);
}

void fun2(const char *str)
{
    printf("in fun2, the str is %s\n", str);
}

int main(int argc, char *argv[])
{
    printf("hello gdb\n");

    fun1(argc);
    int i = 1;
    for (; i<argc; i++)
    {
        fun2(argv[i]);
    }
    return 0;
}
# gcc -g -Wall -Werror one.c -o one            // 必须要加 -g 选项, 否则不会加载符号表之类的,调试不方便
# gdb one
(gdb) l   10        // list, 列出程序   : 列出后面10行
6 }

8 void fun2(const char *str)
9 {
10     printf("in fun2, the str is %s\n", str);
11 }
12 
13 int main(int argc, char *argv[])
14 {
15     printf("hello gdb\n");
# (gdb) b main        // b 设置断点    :在main函数设置断点,b后面可以接函数名; 等于命令b 15,  可以接行数
Breakpoint 1 at 0x40055e: file one.c, line 15.
# (gdb) info b         // info 显示信息    :显示所有的断点
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040055e in main at one.c:15
# (gdb) r                // r  开始执行       : 程序开始执行,直到遇到断点或者执行完成
Starting program: /root/gdb/one

Breakpoint 1, main (argc=1, argv=0x7fffffffe688) at one.c:15
15     printf("hello gdb\n");
# (gdb) n               // n  下一步          : 执行该行命令,并显示下一行
hello gdb
17     fun1(argc);
# (gdb) <CR>            // 换行   执行上一次的命令            : 再执行一次n
in fun1, the ac is 1
18     int i = 1;
# (gdb)  c               // 一直执行直到遇到断点
Program exited normally.
并没有进入到fun2,因为没有传递参数,那再来一遍且带参数
# gdb one
# (gdb) b 21            // 直接将断点打到 fun2那里
# (gdb) r 1 2 3 4     // 运行并带参数(1 2 3 4)
Breakpoint 1, main (argc=5, argv=0x7fffffffe668) at one.c:21
21         fun2(argv[i]);
# (gdb) s                // 单步执行          : 与n不同的是它会进入函数
fun2 (str=0x7fffffffe8d5 "1") at one.c:10
10     printf("in fun2, the str is %s\n", str);

多个文件中有相同的函数 function_test()
(gdb) b function_test           // 所有函数都打断点

(gdb) b a.c:function_test       // a.c中的函数断点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值