gdb调试的经验基本流程处理

news2025/1/19 3:18:15

一、启动调试

1、gdb启动
gdb启动非常简单,只要直接执行下面的命令:

gdb exename(调试文件的名称)

2、设置参数
如果需要调试的程序需要输入参数怎么办呢?有三种方法可以实现:
a、在启动调试程序时使用命令参数设置

gdb --args ./test  abc   //test是执行程序,abc是参数

b、在启动调试程序后用参数设置命令

setargs 参数1 参数2.....

c、在启动调试后使用运行命令带入参数

gdb test
r  参数1 ...

3、开始调试
启动调试程序后并没有进入调试程序内部,此时虽然可以设置断点等操作,但真正开始调试还要执行启动执行命令,有两种方式:
a、直接使用r(run)命令
直接进入调试状态到断点。如果没有断点,则一直执行到最终或者进入相关循环状态。
b、使用start命令
此命令只会执行到main函数的第一行。可以认为是执行r命令,但是在main函数第一行设置了断点。

4、屏蔽说明信息
在启动gdb时会出一大串的说明信息,铺天盖地的,这个当然可以不显示使用下面的命令参数-q:

gdb  exename -q

二、进程附加调试

这种情况应用在不可停止的程序调试上,有三种方式:

gdb exename  pid(进程ID,如13678)  //  附加到想调试的运行进程
gdb -p  pid                       //  附加到想调试的运行进程

//分两步执行先启动gdb,再附加
gdb  
attach 3598	                     //先启动gdb,再附加到调试程序

三、远端调试

需要下载gdbserver,在Ubuntu中可以使用apt命令来安装。成功后,找两台机器:
A:IP(192.168.2.22) 端口:8000 B:IP(不考虑)
A做为被调试端,为Server远端机,在其上执行并出现下面界面:

gdbserver 192.168.2.22:8000 d1  或者【gdbserver IP:port --attach pid】
Process /home/fjf/gdbtest/bin/d1 created; pid = 3968
Listening on port 8000

在这里插入图片描述

B做为本地调试机器,执行下面命令:

//先启动gdb
gdb
//再使用target命令连接远端即A
target remote 192.168.2.22:8000
//连接成功后,下断点
b 55
//执行
n
//显示数据
p xdata

在这里插入图片描述

下面一个本机模拟外机连接(即A、B两台机器都在一台电脑上,和网络测试一样),另外一个B本地机在另外一台机器上(A、B是完全不同的两台电脑)。

相同机器:
在这里插入图片描述

两机:
在这里插入图片描述

由于第二台机器没有拷贝源码,所以只能查看调试数据,看不到代码相关内容。

注意,这里B机器(本地机器),连接远端后不支持r命令,可以使用c命令启动执行。
这次对远端调试做了实例分析,更有可操作的借鉴性。

三、调试core文件

如果程序在运行后崩溃,可以使用gdb调试相关崩溃的信息:

gdb exename core.13567

bt

一般来说,崩溃后最有价值的当然是bt命令中看到的调用堆栈,可以大概推断到哪个函数甚至哪行出了问题。

四、进入和退出函数

在使用b命令断点打好之后,可以有几种命令来进行调试:

a、使用n或nexti命令
此命令在当前函数内执行到下一行,但不进入调用函数中。netxi代表单步执行一条机器指令,同样也不进入调用函数
b 、使用s或stepi命令
此命令与上一条命令类似,但进入函数。
c 、使用c命令
继续执行当前调试程序,走到断点或者结束。
d、使用finish命令
这可以理解成为s命令的逆向命令,退出函数调用。当然这个命令可以用在函数外部设置断点,c命令直接到断点来实现。

五、总结

gdb这个系列会不定期的根据情况来更新,主要目的是把一些前面应用时忽略的技巧和方法在实际工程中用到后就总结出来,所以可以不如以前的系列完备,如果对gdb有一些更深的了解的可以翻看一下以前的文章并对比相关书籍,一定会有所收获。
注意:要想调试,最主要的别忘记在编译程序时增加-g选项,当然在其它方式的编译情况下也要选择与此相同功能的设置,如cmake的CMakeLists.txt文件中增加“set(CMAKE_BUILD_TYPE Debug)”,诸如此类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中启动docker 出现 ‘ Failed to start docker.service: Unit not found. ’ 错误

启动docker 出现 ‘ Failed to start docker.service: Unit not found. ’ 错误 这是因为缺少 rhel-push-plugin.socket 单元,该单元是rhel-push-plugin软件包的一部分。所以我们执行以下指令就可以成功解决: curl -sSL https://get.docker.com/ | sh 执…

搭建redis集群

前言 redis 集群分为一下几种: 【主从模式】:一般情况大多都是读多写少的情况,主从模式可以将读写分离,主库写,从库只负责读取的情况,这从如果任何一个从库宕机的情况,整个集群仍然可以提供工作…

使用GUI Guider工具开发嵌入式GUI应用(6)-切换多screen换场景

使用GUI Guider工具开发嵌入式GUI应用(6)-切换多screen换场景 本节将展示使用GUI Guider实现切换显示页面功能。 这里设计的用例是: 创建3张页面,screen_0,screen_1和screen_2。分别在每个页面上中放置一个Label(最…

仿牛客论坛项目day7|Kafka

一、阻塞队列 创建了一个生产者线程和一个消费者线程。生产者线程向队列中放入元素,消费者线程从队列中取出元素。我们可以看到,当队列为空时,消费者线程会被阻塞,直到生产者线程向队列中放入新的元素。 二、Kafka入门 发布、订阅…

亿图脑图MindMaster思维导图及亿图图示会员-超值途径

亿图脑图MindMaster思维导图及亿图图示会员 先简单看一下这两软件: MindMaster 亿图图示 丰富的社区,便捷易操作的界面,还有耐看的UI设计;要是再有点特权,真的是锦上添花~ 如果需要MindMaster思维导图或者亿图图示VIP…

Android Retrofit原理浅析

官方地址:Retrofit 原理:Retrofit 本质上是代理了OKhttp,使用代理模式,Type-Safe 类型安全 编译器把类型检查出 避免类型错误, enqueue 异步 切换线程 execute 同步 不切换线程 enqueue:Call接口定义的抽象方法 Retrofit.Create() 方法首先验证接口validateServiceInterf…

ps吸管工具用不了怎么办?

我们的办公神器ps软件,大家一定是耳熟能详的吧。Adobe photoshop是电影、视频和多媒体领域的专业人士,使用3D和动画的图形和Web设计人员,以及工程和科学领域的专业人士的理想选择。Photoshop支持宽屏显示器的新式版面、集20多个窗口于一身的d…

小数据 vs 大数据:为AI另辟蹊径的可操作数据

在人工智能背景下,您可能已听说过“大数据”这一流行语,那“小数据”这一词呢,您有听说过吗?无论您听过与否,小数据都无处不在:线上购物体验、航空公司推荐、天气预报等均依托小数据。小数据即一种采用可访…

webpack 和 ts 简单配置及使用

如何使用webpack 与 ts结合使用 新建项目 ,执行项目初始化 npm init -y会生成 {"name": "tsdemo01","version": "1.0.0","description": "","main": "index.js","scripts&…

java_免费文本翻译API_小牛翻译

目录 前言 开始集成API 纯文本翻译接口 双语对照翻译接口 指定术语翻译接口 总结 前言 网络上对百度,有道等的文本翻译API集成的文章比较多,所以集成的第一篇选择了小牛翻译的文本翻译API。 小牛翻译文本翻译API,支持388个语种&#xff0…

CrossOver2023快速在Mac和Linux系统上运行Windows软件

让您可以在 Mac 和 Linux 系统上运行 Windows 应用,不必购买 Windows 授权,不必重启系统,不必使用虚拟机。通过 CrossOver, 您可以从 dock 直接启动 Windows 应用,与您的 Mac 和 Linux 系统功能无缝集成。 无需重启 Cr…

强训第35天

选择 A 经过一个1->2 经过两个2->4 开始慢增长 4->5 5->6....9->10 到达4KB时变成慢增长,最多增长到10 D 网络号是180.80.76 但题目让向主机所在子网发广播 180 .80 .(01001101 | 111111 11)79 .255 标红的两位属于主机号所以答案为D A C 分片的组…

排名算法简介:对搜索结果进行排序的主要排名算法

一、介绍 学习排名 (LTR) 是一类监督式机器学习算法,旨在根据项目与查询的相关性对项目列表进行排序。在分类和回归等问题中的经典机器学习中,目标是根据特征向量预测单个值。LTR 算法对一组特征向量进行操作,并预测项…

【FAQ】视频集中存储EasyCVR安防监控平台接入AI分析时的通道显示问题排查

安防视频监控平台视频集中存储EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。 安防监控视频云存储平台EasyCVR既具…

为什么贴片电阻的阻值不规律?为了在某精度下做到阻值的全覆盖(对,但不全对),E系列电阻的算法(E12系列值不对的猜想)

1、先放上E系列的电阻表格 E12精度10%,E24精度5%,E96精度1%; 2、以精度作为条件的演算 通常我们选择电阻,要确定电阻的精度,如果以精度作为条件。 以10%精度来说:(数值少,好算&am…

STM32 CubeMX (第二步Freertos任务通信:队列、信号量、互斥量,事件组,任务通知)

STM32 CubeMX STM32 CubeMX ____Freertos任务通信:队列、信号量、互斥量,事件组,任务通知 STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)使用…

超分辨率地震速度模型

文献分享 1. Multitask Learning for Super-Resolution 原题目:Multitask Learning for Super-Resolution of Seismic Velocity Model 全波形反演(FWI)是估算地下速度模型的强大工具。与传统反演策略相比,FWI充分利用了地震波的…

计算机丢失msvcp110.dll是什么意思?如何修复?

在日常使用电脑的时候,有时候会遇到一些使用问题。 比如,有一次遇到了这样一个问题。 那就是,因为“msvcp110.dll”这个文件丢失,有些软件安装不了。 计算机丢失msvcp110.dll是什么意思?该如何修复呢? ​…

05-微信小程序常用组件-表单组件

05-微信小程序常用组件-表单组件 文章目录 表单组件button 按钮案例代码 form 表单案例代码 image 图片支持长按识别的码案例代码 微信小程序包含了六大组件: 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设…

LC-二叉树最大深度

LC-二叉树最大深度 链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 描述: 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 例1: …