当前位置: 首页 > article >正文

【linux】gdb

Alt

🔥个人主页Quitecoder

🔥专栏linux笔记仓

Alt

目录

    • 01.gdb使用

01.gdb使用

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

release版本不可被调试,debug版本可以,原因是,debug版本下编译器形成可执行程序的时候会给可执行程序添加调试信息

  1 myprocess-debug: myprocess.c
  2     gcc -std=c99 -o $@ $^ -g                                                                                          
  3 
  4 .PHONY: clean
  5 clean:
  6     rm -f myprocess-debug
readelf  -S myprocess-debug

readelf 是一个用来显示 ELF(Executable and Linkable Format)文件信息的工具。-S 选项用于显示 ELF 文件的节头部信息(section headers)。通过这个命令,你可以查看包含在 ELF 文件中的不同节(section),这些节可能包括代码段、数据段、符号表、字符串表等

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
int AddToTarget(int a,int b)
{
    int sum=0;
    for(int i=a;i<=b;i++)
    {
        sum+=i;
    }
    return sum;
}
int main()
{
    printf("run begin...\n");
    int result=0;
    result=AddToTarget(1,100);
    printf("result:%d\n",result);
    printf("run end...\n");
    return 0;
}

gdb binFile 退出: ctrl + dquit 调试命令:

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
    在这里插入图片描述
    在这里插入图片描述
    list/l: l文件名:行号/函数名,I行号/函数名
    在这里插入图片描述

list/l 函数名:列出某个函数的源代码。

  • r或run:运行程序。
    在这里插入图片描述

  • break(b) 行号:在某一行设置断点
    break 函数名:在某个函数开头设置断点
    info break ( i b ):查看断点信息。
    在这里插入图片描述
    delete(d) breakpoints:删除所有断点
    delete breakpoints n:删除序号为n的断点
    在这里插入图片描述
    disable breakpoints:禁用断点
    enable breakpoints:启用断点
    在这里插入图片描述
    在这里插入图片描述

  • n 或 next:单条执行。
    在这里插入图片描述

  • s或step:进入函数调用
    在这里插入图片描述

  • finish:执行到当前函数返回,然后挺下来等待命令
    在这里插入图片描述

  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数
    在这里插入图片描述
    display 变量名:跟踪查看一个变量,每次停下来都显示它的值
    在这里插入图片描述
    undisplay(编号):取消对先前设置的那些变量的跟踪
    在这里插入图片描述

  • continue(或c):从当前位置开始连续而非单步执行程序(运行到下一个断点)

  • until X行号:跳至X行

  • breaktrace(或bt):查看各级函数调用及参数

  • info(i) locals:查看当前栈帧局部变量的值

  • quit:退出gdb


http://www.kler.cn/a/326288.html

相关文章:

  • Java连接MySQL(测试build path功能)
  • 河道无人机雷达测流监测系统由哪几部分组成?
  • resnet50,clip,Faiss+Flask简易图文搜索服务
  • Ansible内置模块之known_hosts
  • STM32单片机设计防儿童人员误锁/滞留车内警报系统
  • SystemVerilog学习笔记(十一):接口
  • 鸿蒙HarmonyOS之封装Http请求工具类
  • Spring Boot 进阶-第一个程序HelloWorld
  • C语言 | Leetcode C语言题解之第447题回旋镖的数量
  • knowLedge-Vue I18n 是 Vue.js 的国际化插件
  • SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
  • 关于开发板与虚拟机网络不通问题排查
  • 在线点餐新体验:Spring Boot 点餐系统
  • excel不经过后台实现解析和预览(vue)
  • YOLOv8 Flask整合问题
  • Git 使用方法
  • c++泛型编程
  • 【hot100-java】【二叉树的层序遍历】
  • Excel:常用函数
  • vue中异步批量删除列表数据
  • 常用的MySQL日期、时间函数
  • 视频集成与融合项目中需要视频编码,但是分辨率不兼容怎么办?
  • 使用 C++ 实现卷积运算:从理论到实践的详细指南
  • Leetcode 739.42. 每日温度 接雨水 单调栈 C++实现
  • 局部整体(七)利用python绘制圆形嵌套图
  • 2024/9/29周报