gdb调试工具的基本用法

2023-11-17

一、基本命令

gcc -g test.c -o test      #编译时生成debug有关的程序信
gdb test                 #启动调试
help                     #查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
run                     #重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
start                     #单步执行,运行程序,停在第一执行语句
list                     #查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
set                     #设置变量的值
next                     #单步调试(逐过程,函数直接执行),简写n
step                     #单步调试(逐语句:跳入自定义函数内部执行),简写s
backtrace                 #查看函数的调用的栈帧和层级关系,简写bt
frame                     #切换函数的栈帧,简写f
info                     #查看函数内部局部变量的数值,简写i
finish                     #结束当前函数,返回到函数调用点
continue                 #继续运行,简写c
print                     #打印值及地址,简写p
quit                     #退出gdb,简写q
break+num                 #在第num行设置断点,简写b
info breakpoints         #查看当前设置的所有断点
delete breakpoints num     #删除第num个断点,简写d
display                 #追踪查看具体变量值
undisplay                 #取消追踪观察变量
watch                     #被设置观察点的变量发生修改时,打印显示
i watch                 #显示观察点
enable breakpoints         #启用断点
disable breakpoints     #禁用断点
x                         #查看内存x/20xw 显示20个单元,16进制,4字节每单元
run argv[1] argv[2]     #调试时命令行传参
set var 变量名=value     设置变量的值

set follow-fork-mode parent

set follow-fork-mode child

二、调试core文件

        程序挂掉时(比如出现段错误时),系统缺省不会生成core文件
        (1) ulimit -a 查看系统参数


        (2)ulimit -c unlimited 把core文件的大小设为无限制

                  先切换到root用户,输入这个命令 echo core >/proc/sys/kernel/core_pattern(设置core文件出现在当前路径),再执行ulimit -c unlimited
        (3) 运行程序,生成core文件 ;


        (4)gdb 程序名 core文件名(gdb ./main core)

从图中就可以看出是在 bb函数中出现的段错误 

 三、调试正在运行的程序

        先找到正在运行程序的进程号,然后执行 gdb ./main -p 进程号,这时候正在运行的程序就会暂停,这时调试就跟普通调试一样了。

四、调试多进程程序

        调试父进程: set follow-fork-mode parent (缺省)

        调试子进程: set follow-fork-mode child
        设置调试模式:set detach-on-fork [onloff],缺省是on 表示调试当前进程的时候,其它的进程继续运行,如果用off调试当前进程的时候,其它的进程被gdb挂起。
        查看调试的进程:info inferiors

        切换当前调试的进程: inferior 进程id

五、调试多线程程序

        在shell中执行
        查看当前运行的进程: ps aux| grep book

        查看当前运行的轻量级进程: ps -aL |grep book

        查看主线程和新线程的关系: pstree -p 主线程id

        在gdb中执行
        查看线程: info threads

        切换线程: thread 线程id

        只运行当前线程: set scheduler-locking on

        运行全部的线程: set scheduler-locking off

        指定某线程执行某gdb命令: thread apply 线程id cmd

        全部的线程执行某gdb命令: thread apply all cmd

六、利用日志文件来调试

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gdb调试工具的基本用法 的相关文章

随机推荐

  • springmvc中的resolveView(视图解析器)

    视图解析器接口只有一个方法 就是根据名称解析出视图信息 一个视图对象View 采用的是模板模式 抽象模板类 AbstractCachingViewResolver 主要处理缓存 如果视图对象在缓存中有 则从缓存中取 如果没有则创建 publ
  • 整理最全的图床集合——三千图床

    2021 09 25 更新 去除部分图床 添加新的图床 优化排版 引言 古有弱水三千 今有三千图床 勿埋我心 图床一般是指储存图片的服务器 有国内和国外之分 国外的图床由于有空间距离等因素决定访问速度很慢影响图片显示速度 国内也分为单线空间
  • remote: HTTP Basic: Access deniedfatal: Authentication failed for ‘xxxxx‘的问题解决

    在没有修改git密码的情况下 使用vs code推送代码 总是会报错 remote HTTP Basic Access denied fatal Authentication failed for xxxxxxxx git仓库地址 网上试了
  • YOLOV7开源代码讲解--训练参数解释

    目录 训练参数说明 weights cfg data hpy epoch batch size img size rect resume nosave notest noautoanchor evolve bucket cach image
  • 【Basis】狄利克雷分布

    初次看狄利克雷分布 比较懵 主要是它有很多先行知识 所以我先介绍狄利克雷分布用到的多项式分布 gamma 函数 beta分布 然后再介绍狄利克雷分布 参考文献见文章末 目录 一 多项式分布 multinomial distribution
  • 仅仅是一张照片就是不能刷脸支付的

    科技改变未来并不是一句口号 就拿买东西来讲 以前人们都是一手交钱一手交货 拿到大额的纸币 还要验真假 而现在移动支付成为主要付款方式 只要一部手机 扫一扫就能付款 一开始也有很多人不习惯手机支付 因为觉得没有现金实在 整天就是一堆数字转来转
  • 解决TypeError: 'function' object is not subscriptable

    一 解决问题 在tensorflow中使用零矩阵初始化变量的时候出现的该异常 TypeError function object is not subscriptable 二 解决方法 问题代码如下 bias tf Variable tf
  • 深度学习(9):Inception危险物品检测

    目标 基于Inception网络实现对危险物品检测 将危险物品图片或视频经过图像预处理后输入模型推理 最后将检测结果进行可视化输出 一 原理 Google的Inception网络介绍 Inception为Google开源的CNN模型 至今已
  • Java的变量

    1 Java 变量类型 答 在Java语言中 所有的变量在使用前必须声明 声明变量的基本格式如下 type identifier value identifier value 格式说明 type为Java数据类型 identifier是变量
  • Java实现生成csv文件并导入数据

    一 需求 下载列表 在没有过滤之前下载列表所有数据 点击过滤之后 下载过滤之后对数据 生成csv文件 二 思路 先根据条件 是否过滤了数据 筛选出数据 将数据导入csv文件 生成文件并返回 三 代码实现 1 controller层 文件下载
  • Gbase 8s存储结构简介及空间管理

    Gbase 8s实例可以创建多个dbspace 一个dbspace可以包含多个物理chunk 一个chunk分成多个连续扩展区extent 一个表或者索引占用的空间被称为一个tablespace 一个extent包含多个物理页page 其中
  • 利用多线程来实现一个简单的服务器,来实现处理多个用户的请求

    服务器来实现接受多个客户的请求 并且处理响应 服务器采用了多线程 代码如下服务器 package cn kgc basic tcpthread import java io IOException import java net Serve
  • BERT从零详细解读:如何微调BERT,提升BERT在下游任务中的效果

    a 是句子对的分类任务 b 是单个句子的分类任务 c 是问答任务 d 是序列标注任务 首先我自己最常用的就是 文本分类 序列标注和文本匹配 这四个都是比较简单的 我们来看d 序列标注 其实就是把所有的token输出 做了一个softmax
  • Blender学习笔记(建模#3:点操作)

    建模 3 点操作 点操作 1 点的移动 2 点的滑移 3 点的合并 4 点的倒角 5 顶点连接 点操作 1 点的移动 当要将点在斜面上移动时 直接移动很难顺着斜面移动 这时可以使用法向坐标系 2 点的滑移 基本同线的滑移 3 点的合并 两点
  • AngularJs 的compile, preLink , postlink

    AngularJs 的compile preLink postlink 主要参考文章 1 http www jb51 net article 58229 htm 文章中对这三个概念做了详细的解析 如果你只写了一个link 那么系统会默认是p
  • Burp Suit+Phpstudy+Pikachu搭建Web安全练习环境

    1 软件安全测试工具Burp Suit安装 1 1 社区版 进入官网 Download Burp Suite Community Edition PortSwigger 进行下载安装即可 1 2 专业版 搜索Burp Suit2 0 11从
  • 链表相交等相关问题java - 左神算法基础课04 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天讲讲我至今碰到的最变态的链表题 问题 单链表两个单链表可能有环 可能无环 判断两个链表是否存在相交 如果有相交 返回其中一个交点 要求 时间复杂度 O m n 空
  • 【计算机网络】湖科大微课堂笔记 p36-37 集线器与交换机的区别、以太网交换机自学习和转发帧的流程

    集线器与交换机的区别 集线器 共享型以太网 交换机 交换式以太网 早期与集线器 使用集线器HUB在物理层拓展以太网 下面是三个独立的以太网 可以用集线器把它们互联形成更大的以太网 若一系中的某主机向二系中某主机发送数据帧 则此信号会传遍整个
  • antd 4.x, 实现Table 可编辑 , Table 结合Form.List,实现单独校验Form.List、Form.Item校验

    背景 需要实现一个这种表格 思路 1 编辑表格 antd 有案例 2 Form List 嵌套Table 实现 关键点 单行校验怎么传参 单行如何获取值 单行如何重置 注意 我的form 是从外层传进来的 这个没有影响 正常在 Form L
  • gdb调试工具的基本用法

    一 基本命令 gcc g test c o test 编译时生成debug有关的程序信 gdb test 启动调试 help 查看命令帮助 具体命令查询在gdb中输入help 命令 简写h run 重新开始运行文件 run text 加载文