Linux调试器gdb的使用

本文介绍Linux环境下使用gcc编译器的不同模式,并重点讲解如何利用gdb工具进行程序调试,包括设置断点、查看变量值等实用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

  • 程序发布有两个版本,Debug模式和Release模式

  • Linux下gcc/g++出来的二进制程序默认是release模式

  • 要使用gdb调试,必须在源代码生成二进制程序时加上 -g 选项(如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址)

gdb功能

gdb可实现以下四个功能:

  1. 启动程序,自定义运行

  2. 设置断点

  3. 当程序停止可检查程序发生的事

  4. 动态改变程序执行环境

调试实例

main.c

#include <stdio.h>

int Add(int a, int b){
    return a + b;
}

int main(){
    int result = Add(2, 3);
    int i = 1;
    int sum = 0;
    for(; i < 10; ++i){
        sum += i;
    }
    printf("sum = %d\n", sum);
    printf("result = %d\n, result);
    printf("Hello World!\n");
    printf("^_^嘻嘻嘻\n");
    return 0;
}

调试过程:

描述
描述
描述

常用指令

  • list(l)行号:显示某行源代码,每次列十行(上5行下5行)

  • list(l) 函数名:列出某函数源代码(上2行下8行)

  • break(b) 行号:在某一行设置断点

  • break(b) 函数名:在某个函数开头设置断点

  • info break:查看断点信息

  • info(i) breakpoints:查看当前设置了哪些断点

  • delete(del) breakpoints:删除所有断点

  • delete(del) breakpoints n:删除序号为n的断点

  • disable breakpoints:禁用断点

  • enable breakpoints:启用断点

  • run(r):运行程序

  • next(n):单条执行

  • step(s):进入函数调用

  • continue(c):继续执行,非单步执行

  • p 变量:打印变量值

  • breaktrace(bt):查看函数堆栈

  • frame 0:查看栈顶

  • frame 1:查看第二层栈

  • disassemble 函数名:查看函数汇编

  • quit(q):退出gdb调试

数据输出格式

  • x 按十六进制格式显示变量。
  • d 按十进制格式显示变量。
  • u 按十六进制格式显示无符号整型。
  • o 按八进制格式显示变量。
  • t 按二进制格式显示变量。
  • a 按十六进制格式显示变量。
  • c 按字符格式显示变量。
  • f 按浮点数格式显示变量。

    如:
    p i (按十进制格式打印变量i)
    p/x i (按十六进制格式打印变量i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值