Linux技术——gdb调试基础

RK1126编译gdb 板子上gdb调试程序 首先去下载一个gdb 高版本的需要c++11支持,rk1126虽然说支持c++11 但是支持的并不是很好。刚开始下了个9.2的版本 编译的时候就是说找不到C++11的支持 ,后来又下了个7.11的版本如下图。下载压缩包解压之后 必须得新建一个build目录 然后再build目录里面编写一个脚本。中间会报很多命令没有 如下 这个没有关系 嵌入式的很多东西都没有。嵌入式板子上都没有gdb程序 需要自己下载编译。之后 就make install成功了。打开对应文件 注释掉就可以。安装textinfo。... 阅读详情

gdb即GNU debugger。
gcc编译选项-g,这样生成的目标代码中就添加了调试信息。
gcc -g –o hello hello.c
gdb完成的大部分工作都可以用很少的命令集合完成。

启动gdb
gdb 程序名 [corefile]
corefile是可选的,但能增强gdb的调试能力。
Linux默认是不生成corefile的,所以需要在用户profile文件中添加
ulimit -c unlimited
修改完成之后让profile文件及时生效

一个有错的程序

#include <stdio.h>
void test(void)
{
    int *i = NULL;
    *i = 2;
}

int main(void)
{
    printf(“hello world\n”);
    test();
    return 0;
}

编译这个程序
gcc –g –o hello hello.c
运行hello
Segmentation fault (core dumped)
程序崩溃
ls
core.3563 hello hello.c
我们看到除了hello文件和hello.c文件之外多了core文件

启动gdb
gdb hello core
如果你不喜欢一大堆的软件信息,可以通过-q参数关闭软件信息
gdb -q hello core
0 0x08048394 in test () at hello.c:5
5 *i = 2;
可以看到gdb通过core告诉你,程序哪条语句出现问题

我们做的第一件事就是在gdb环境中运行这个程序
gdb hello
run命令。
Starting program: /home/test/1/hello
hello world

Program received signal SIGSEGV, Segmentation fault.
0x08048394 in test () at hello.c:5
5 *i = 2;
gdb不但能显示出错行号,还能说明出错出现时的内存地址,这个也是潜在的有用信息。

test函数到底出了什么问题?
where命令,显示导致段错误的执行函数树
0 0x08048394 in test () at hello.c:5
1 0x080483be in main () at hello.c:11
问题出在hello.c文件的第5行。

知道函数出错行的上下文对调试程序是很有帮助的。
list [m,n],m,n是要显示包含错误首次出现位置的起始行和结尾行。不带参数的list将显示附近的10行代码

gdb最有用的功能之一就是它可以显示被调试程序中任何表达式、变量的值。
print 变量,表达式。
print ‘file’::变量,表达式,‘’是必须的,以便让gdb知道指的是一个文件名。
print funcname::变量,表达式
(gdb) print i
$1 = (int *) 0x0
显示指针变量i的值为0。
whatis 命令可以告诉你变量的类型, ptype 告诉你结构的定义。
(gdb) whatis i
type = int *

break命令设置断点
break linenum
break funcname
break filename:linenum
break filename:funcname

退出gdb,重新进入调试模式
gdb -q hello
(gdb) break 4
Breakpoint 1 at 0x804838a: file hello.c, line 4.
(gdb) run
Starting program: /home/test/1/hello
hello world

Breakpoint 1, test () at hello.c:4
4 int *i = NULL;
gdb在第4行停止。

continue命令从断点以后继续执行。
delete删除一个断点。
如果设置了很多断点,忘记了哪些断点已经触发,可以使用info break。
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x0804838a in test at hello.c:4
breakpoint already hit 1 time

改变一个变量的值。
set variable varname = value
varname是变量名称,value是变量的新值。

单步调试
step命令
当遇到一个函数的时候,step将进入函数,每次执行一条语句,相当于step into
next命令
当遇到一个函数的时候,next将执行整个函数,相当于step over
return [value]命令
停止执行当前函数,将value返回给调用者,相当于step return
如果需要重复执行一条命令,不需要每次都键入命令,gdb记住了最后一个被执行的命令,只要简单的按enter键就可以重复执行最后的命令

更多详情参考:
Linux GDB 程序调试工具使用详解

猿创征文|【Linux Debug】Linux调试工具——GDB介绍 我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得! 阅读详情

相关推荐

gdb调试 rk可运行程序

gdb rk可运行程序

core文件调试(gdb)

运行linux时,我们可以设定程序在崩溃的时候生成code文件。

weixin_40026739的博客 1万+

龙芯3A5000开发板PMON升级UEFI固件实战指南

固件是计算机硬件与操作系统之间的关键桥梁,负责初始化硬件并引导系统启动。其工作原理是在上电后执行自检、加载引导程序,最终将控制权移交操作系统。在国产化平台中,采用标准化的UEFI固件具有重要技术价值,它能提供图形化配置界面、统一硬件驱动模型,并支持安全启动等现代特性,从而显著提升硬件兼容性与系统管理效率。这一技术广泛应用于PC、服务器及嵌入式设备,尤其在需要运行银河麒麟等主流操作系统的龙芯开发板场景中,将传统PMON固件升级至UEFI,能实现更流畅的系统安装与更稳定的运行体验。本文基于固件升级与UEFI引导

weixin_42664597的博客 561

程序调试利器——GDB使用指南

GDB是GNU Debugger的简称,其作用是可以在程序运行时,检测程序正在做些什么。GDB程序自身是使用C和C++程序编写的,但可以支持除C和C++之外很多编程语言的调试。

京东科技开发者 1685

SCI、中科院1区算法应用:(BWO-CNN-BiGRU-Attention)白鲸优化深度学习-融合注意力机制预测程序代码!包含特征可视化,数据Excel导入,直接运行!

BWO 白鲸优化算法,于2022年发表在SCI、中科院1区期刊《Knowledge-Based Systems》上。我们利用该高创新算法对我们的CNN-BiGRU-Attention时序和空间特征结合-融合注意力机制的回归预测程序代码中的超参数进行优化。

weixin_48747334的博客 3260

Mac上VMware Fusion手动安装VMware Tools实现跨系统复制粘贴

本文详细指导了在Mac的VMware Fusion中手动安装VMware Tools的完整流程,以解决虚拟机与宿主机之间无法复制粘贴的常见问题。通过定位安装镜像、挂载、解压并运行安装脚本,最终实现跨系统无缝数据交换,提升工作效率。

orange的博客 696

RK3568 上使用 GDB(GNU Debugger)进行调试

希望这些步骤能够帮助你在 RK3568 上使用 GDB 进行调试。请注意,具体的命令和选项可能因系统版本、编译器版本等而有所不同,建议查阅相关文档或资源以获取更详细的信息。要在 RK3568 上使用 GDB(GNU Debugger)进行调试,你需要先确保已经安装了适用于该平台的 GDB 工具。在开发板上编译你的代码时,需要确保在编译选项中启用了调试信息。在 RK3568 设备上打开终端,并导航到可执行文件所在的目录。设置调试环境,例如设置断点、观察变量等。使用 GDB 的其他命令进行调试。

小灰灰的博客 2083

西门子博图指令(定时器操作三)

西门子博图定时器中复位定时器功能指令介绍

yue008的博客 8871

GDB调试

转载至从 0 开始学习 Linux 系列之「08.15 个 gdb 调试基础命令」 此处仅想保存下来自己记录 gdb 简介 gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都直接在命令行中用 gdb 来调试程序,相比 Windows 上的集成开发环境 IDE 提供的图形界面调试,一开始使用 gdb 调试可能会让你感到生无可恋,但是只要熟悉了 gdb 调试的常用命令,调试出程序会很有成就感,一方面因为这些命令就类似图形界面调试按钮背后的逻辑,另一方面用命令行来调试程序,逼格瞬

小白的成长 1万+

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2660

Transformer代码(Pytorch实现和详解)!!!

这个是第一版,有些代码如果不对,欢迎在评论指正,后续会慢慢改,我也是刚接触transformer,若有些地方理解不对还请指正。

xml的博客 5611

Linux调试工具:gdb的使用_i b 指令 linux插件gdb(1)

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!GDB,是The GNU Project Debugger 的缩写,是 Linux 下功能全面的调试工具。GDB支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。

2401_83620927的博客 365

液冷方式介绍

如果将直径在1~100nm的颗粒悬置在传热流体(例如:水、乙烯、乙二醇等)中时,其传热能力会得到提升,因为大多数固体材料的热导率要大于液体,因此由颗粒、流体组成的混合物热导率也高于液体本身的热导率,由此制成的流体,我们称之为纳米流体。金属冷管的液体工质蒸散量几乎为0,而柔软材质的管道则会产生液体的蒸散,在封闭式循环系统中,为了弥补液体工质的蒸散,必须定期在系统中补充液体工质。——我们之前说过,材料的导电和导热的机制大致是类似的,所以导电能力更强的金属往往具有更好的导热能力。

制冷技术咨询与服务的博客 2030

arm-linux-gdb &amp; gdbserver 远程调试工具的搭建与使用_arm gdb调试 不用gdbserver(1)

6)、将生成的gdbserver adb push到ARM开发板上去(当然,也可用nfs的方式),并修改执行权限。1)在步骤2搭建arm-linux-gdb make的时候遇到 configure: error: no termcap library found,这是缺少。成功后即可在PC上使用arm-linux-gdb了。1)进入gdb-7.8的根目录下,创建用于保存arm-linux-gdb的文件夹。完成后,arm-gdb文件夹下就生成了如下文件。2)配置编译器,注意目录必须是绝对路径。

2401_85011876的博客 406

educoder中Hive综合应用案例 — 用户搜索日志分析

Hive综合应用案例 — 用户搜索日志分析

weixin_46026136的博客 4760

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

linux 中调试器 gdb 的使用

1.基本命令 1)进入GDB  #gdb test   test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2)查看源码  (gdb) l   源码会进行行号提示。   如果需要查看在其他文件中定义的函数,在

freeking101的博客 6311

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

GDB 调试入门教程

GDB 调试入门教程

程永强 646

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

嵌入式 Linux 的调试技术

嵌入式 Linux 的调试技术1、打印内核调试信息:printk2、防止 printk 函数降低 Linux 驱动性能3、通过虚拟文件系统(/proc)进行数据交互4、调试工具4.1、用 gdb 调试用户空间程序4.2、用 gdbserver 远程调试内核程序4.3、用 kgdb 远程调试内核程序5、小结 1、打印内核调试信息:printk printk 函数的用法与 printf 函数类似,只不过 printk 函数运行在内核控件,printf 函数运行在用户空间。也就是说,像 Linux 内核程序只能使

clay_xiaoyu的博客 1659

【Linux系统】GDB 调试完全指南:从基础到进阶,解决 90% 的 C/C++ 调试问题

本文介绍了GDB调试工具的核心使用方法。基础部分包括编译配置(-g选项)、常用命令(断点设置、变量查看、单步执行等)和常见问题解决方案。进阶部分讲解了条件断点、观察点等高级调试技巧,帮助定位复杂问题。文章还总结了GDB调试的核心工作流程,从编译启动到问题定位的全过程。掌握这些内容可以解决大多数C/C++程序的调试需求,如需更深入功能可参考官方文档。全文提供了实用的调试技巧和常见问题应对方案,是GDB调试的实用指南。

HZzzzzLu的博客 1451

GDB调试入门指南

GDB调试入门指南 - 知乎 linux常用命令--开发调试篇 | 守望的个人博客

weixiao的博客 783

Linux调试器-gdb的使用

因为debug版本带了调试信息,所以debug版本的存储大小略微比relase大,同时因为带了调试信息,所以给用户使用的是relase版本,在debug的情况下,编译器形成可执行程序的时候,会给可执行程序添加条件信息。但是这会直接把程序从开头运行到结束,达不到调试的效果,我们首先要打断点。Linux gcc/g++出来的二进制程序,默认是release模式。当我们将断点关闭后,再次运行代码直接跑到了第6行,也就是编号3断点处。默认10行,gdb会自动记录最近执行的命令,想全部打印,直接回车。

2203_75397752的博客 1210

【Linux 常用工具】gdb 调试

gdb 常用命令:https://xas-sunny.blog.youkuaiyun.com/article/details/134399664gdb jin:https://blog.youkuaiyun.com/2301_76446998/article/details/144854729?spm=1001.2014.3001.5506

qq_52842680的博客 112

Linux环境下的C/C++基础调试技术1——初步了解

<br /> Linux环境下的C/C++基础调试技术1——初步了解(2010.12.5更新) 收藏 此文于2010-12-03被推荐到优快云首页<br />此文于2010-12-12被推荐到优快云首页<br />如何被推荐?<br />Author:gnuhpc <br />WebSite:blog.youkuaiyun.com/gnuhpc <br />1.调试技术的几个准则<br />惊喜准则:找到错误是一种惊喜,心理上不要畏惧而是要怀着感恩的心去面对。 <br />从小处开始准则:刚开始测试的使用从小处着手

hardworkba的专栏 389

GDB调试实战:从基础命令到高级技巧

本文全面介绍GDB调试工具,从基础命令如断点设置、变量监控到高级技巧如多进程调试和核心转储分析。通过实战案例演示如何快速定位段错误等常见问题,帮助开发者提升调试效率,掌握这一Linux环境下C/C++开发的必备利器。

open4的博客 686

Linux-GDB 调试器入门

GDB(GNU Debugger)是Linux平台下最强大的调试工具,掌握它可以让你从“代码能跑通”进化到“代码为什么能跑通/跑崩”。下。

Xzq210509的博客 383
上一篇: Linux技术——makefile基础
下一篇: C/C++—— 对多态现象的理解
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值