首页 > 其他分享 >gdb使用入门

gdb使用入门

时间:2023-07-14 22:57:16浏览次数:60  
标签:文件 入门 查看 命令 gdb 使用 test 断点

GDB调试教程:1小时玩转Linux gdb命令

sudo dnf debuginfo-install glibc-2.32-2.fc33.x86_64

编译时, gcc -g test.c -o test,因为在调试二进制文件的时候,我们需要在二进制文件中加入调试信息,而调试信息是怎么添加的呢?它是在编译的时候,通过-g选项添加的,即类似于gcc -g test.c -o test这样的命令。缺少-g参数会出现出错信息【No symbol table is loaded. Use the "file" command.】,添加之后执行文件稍微变大。

开始调试时,gdb test --silent;再次运行或提示【】, 换别的执行文件需要命令 file test

GDB常见的调试指令

gcc -g [option] [file]
gdb 可执行文件

设置断点和恢复命令

1.常见命令

  • l(list):查看载入的文件代码,如:l 10l main

  • b(break):设置断点,如:b 10b main

  • info b:查看断点信息;

  • r(run):从main运行,到断点处暂停;

  • v 行号:从该行号开始运行;

  • p(print) n:查看n值;

  • n(next):单步下行;

  • s(step):单步进入;

  • c(continue):恢复程序的运行,执行下面程序;

2.高级命令

  • disable 点;

  • enable 点;

  • delete 点info编号;

  • tbreak 临时断点(一次);

  • condition 点 <条件>;

  • ignore 点

查看源代码相关命令

  • list(l) <行号>/<函数名>;

  • file [文件名] 加载文件;

  • forword-search 正则表达式;

  • reverse-search 正则表达式;

  • show directories 源文件路径;

  • disassemble 函数名:反汇编;

  • info line 显示加载内存gdb码;

设置工作环境相关命令

  • set args 参数 //main(args)

  • show args

  • path dir 设定程序运行路径

  • show paths 查看程序运行路径

  • set envirnment var[=value] 环境变量

  • show envirnment var/PATH

  • cd dir

  • pwd

  • shell commend

查看运行数据相关命令

  • print(p) 表达式、变量

  • x /<n/f/u> <addr> 查看内存变量内容

    • n:表示显示内存长度(整数)

    • f:表示显示格式

      • d:十进制

      • x:十六进制

      • o:八进制

      • t:二进制

    • u: 表示显示字节数

    • <addr>:变量内存地址

  • display 表达式

    • display /i $pc 显示c和汇编同步

    • x /i $pc 程序计数器

gdb core 使用(找段错误)

  1. 打开core dump

    1. ulimit -c 默认大小为0

    2. ulimit -c size(k)

  2. gcc -g 源 -o 目文件

  3. 运行有问题产生的core文件

  4. gdb 可执行文件 core文件

2, Debuginfod : 在线调试信息服务器

Debuginfod

标签:文件,入门,查看,命令,gdb,使用,test,断点
From: https://www.cnblogs.com/weixicai/p/17555180.html

相关文章

  • Python保姆级教程 数据类型—新手小白入门必看系列
    推荐使用压缩软件和杀毒软件7-zip使用火绒一、基本数据类型与变量(上)2.1注释优点:代码说明没注释的代码有注释的代码不让解释器执行注释的那句话2.2单行注释单行注释快捷键:ctrl+?2.3多行注释""""""(三个双引号)2.4字面量变量字面量是已经被定义好的量在......
  • Elasticsearch:使用 runtime fields 探索你的数据
    Elasticsearch考虑要提取字段的大量日志数据。为数据建立索引非常耗时,并且会占用大量磁盘空间,而你只想探索数据结构而无需预先提交schema。你知道你的日志数据包含你要提取的特定字段。在这种情况下,我们要关注@timestamp和消息字段。通过使用运行时字段(runtimefields),你可以......
  • ES6 标准入门 笔记1
    一、ECMAScript1.ECMAScript和JavaScript的关系:前者是后者的规格,后者是前者的实现。2.ES6指的是ES5.1版本以后的JavaScriptD下一代版本。3.初版ES6从制定到发布经历了15年(2000-2015)。(ES2015:2015年6月发布)4.ECMAScript提案阶段:4.1Strawman(展示阶段);4......
  • Java Comparator接口的介绍与使用
    JavaComparator接口的介绍与使用什么是Comparator接口?Comparator接口是一个用于比较两个对象大小的接口,它定义了一个抽象方法compare(To1,To2),根据o1和o2的大小返回一个整数值。Comparator接口位于java.util包中,它是一个泛型接口,可以指定比较的对象类型。Comparator接口的......
  • Grpc C++使用总结
    Grpc一,安装安装依赖sudoapt-getinstallpkg-configsudoapt-getinstallautoconfautomakelibtoolmakeg++unzipsudoapt-getinstalllibgfalgs-devlibgtest-devsudoapt-getinstallclanglibc++-dev下载gRPCgitclonehttps://github.com/grpc/grpc.gitc......
  • 编译器和 gdb
    g++-oXXXX.cpp编译-ggdb调试-O2吸氧-pg看函数运行-ftrapv有没有溢出-fsanitize=address看数组有没有越界-pg-ftrapv-fsanitize=address都要运行一遍(./XX)-pg后面还要gprof-b./XX如果越界了,后面两个会给出Aborted直接终止gdb调试gdb(./)XX开始......
  • Amazon 上的数字孪生:使用 L3 预测性数字孪生来预测“行为”
    在上一篇博文中,我们讨论了数字孪生的定义和框架,这与我们的客户在其应用中使用数字孪生的方式一致。我们将数字孪生定义为“单个物理系统的动态数字表示,它通过数据进行动态更新以模仿物理系统的真实结构、状态和行为,从而加快获得业务成果。”此外,我们描述了一个四级数字孪生平衡指......
  • Vuex是什么,怎么使用?
    Vuex是一个状态管理库,它为Vue应用程序提供了一个集中式的存储管理机制,用于管理不同组件之间共享的状态数据。Vuex将该状态存储在一个单一的对象树中,这使得在整个应用程序中追踪状态变化变得更加容易和可预测。当我们在一个Vue.js应用程序中编写代码时,我们会遇到以下问题:多个组件需......
  • docker使用
    1、介绍docker有三个重要概念,仓库Repository,镜像Image和容器Container。(1)容器一个容器对应一个可用的程序。可能是简单的程序,比如helloworld。也可能是知名的应用,比如mysql、tomcat。甚至可能是操作系统,比如linux。docker容器的运行与常规的运行类似,也会占用docker所在主机......
  • Java入门13(socket)
    Socket编程(网络通信)服务器端Demo(ServreSocket)​ 创建服务端时,如果不提供IP地址,则默认为本地连接(127.0.0.1),但是一定需要手动配置监听端口!publicstaticvoidmain(String[]args){//如果不提供IP地址,默认localhost//但是服务器端的端口号需要手动指令try(Serv......