Linux 下 gdb 的使用

Linux:GDB调试指南(什么是GDB?GDB如何使用?) 基于gcc的debug调试 阅读详情


一、概述

GDB(GNU调试器)是一个功能强大的开源调试工具,可用于调试多种编程语言,包括 C、C ++、Fortran 等。它可以在运行过程中检查程序状态,设置断点以停止程序执行并观察变量值、内存状态等,并提供一系列命令和功能来辅助调试过程。

GDB 的主要功能包括以下几个方面:

  • 设置断点:GDB 允许你在程序的某一行代码上设置断点,当程序执行到这一行时会暂停并等待调试命令。
  • 单步调试:通过单步调试,你可以逐行执行程序并观察每一行代码的执行情况,方便定位问题。
  • 查看变量和内存:在调试过程中,你可以查看各个变量的值,检查它们是否符合预期。同时,你还可以查看内存的内容,以了解程序的内部状态。
  • 捕捉错误:GDB 可以帮助你捕捉程序的错误,包括内存访问错误、未处理的异常等。当程序发生错误时,GDB会在错误发生的地方停下来,并提供相关信息。
  • 远程调试:在某些情况下,你可能需要在远程机器上进行调试。GDB 支持远程调试,你可以通过网络连接到远程机器,并在该机器上进行调试操作。

更多信息可以查看 GDB 官网。

1、安装和启动 GDB

首先输入命令:gdb -v 查看是否安装过 GDB:

如果没有安装则输入(Ubuntu 下):

# sudo apt-get install gdb

然后就可以启动 gdb 进行调试了。通过输入如下命令来启动 gdb 调试,直接指定需要调试的可执行文件名即可:

# gdb test_file

当下方出现图中圈中的字段则表示可调试。而如果出现了下图中的字段则表示无法调试:


使用常规编译生成的可执行文件正常一定会出现 No debugging symbols found in xxx 这个错误。而且即使使用带调试信息 -g 编译时,有时候也会出现这种情况。

解决方法如下:

我们先使用 -c -g 生成带调试信息的只进行过预处理、编译、汇编,但没有被链接的目标文件,再利用目标文件链接、重定位后生成可执行文件,使用这个可执行文件便不会出现问题。

$ gcc -c -g test_file.c # 生成 test_file.o 文件 
$ gcc test_file.o -o test_file

如果目标执行文件要求出入参数(如 argv[] 接收参数),则可以通过如下三种方式指定参数:

  1. 在启动 gdb 时,gdb --args text_file
  2. 在进入 gdb 之后,运行 set args param_1
  3. 在进入 gdb 调试以后,run param_1 或者 start param_1

其中的 param_1 是你自己要输入的参数。

二、 GDB 常用命令

以下以 test_file.c 作为源程序例子的名字,test_file 作为可执行文件例子的名字, 以 param_1 作为参数的例子的名字。

格式说明:

(gdb) 表示是在 GDB 调试页面输入的命令

p(print):表示 p 是 print 指令的缩写

// test_file.c
#include <stdio.h>
  
void swap(int *x, int *y)
{
    int t = *x;
    *x = *y;
    *y = t;
}

int main(void)
{
    int a = 10;
    int b = 20;

    printf("a = %d, b = %d\r\n", a, b);

    swap(&a, &b);

    printf("a = %d, b = %d\r\n", a, b);

    return 0;
}

然后再用上一节提到过的方法生成可执行文件。

1、查看源码

(gdb) l(list) [函数名][行数]

输入 l 或 list 即可

如果直接输入 l 则会直接从文件第一行开始打印,一次打印 10 行,直到文件尾:

可以看到,GDB 会自动记忆我们上次敲入的指令。

当然,如果想看指定行的代码,则在 l 后面加上一个行号即可:

同理,如果想看指定函数的代码,则在 l 的后面加上指定的函数名即可:

2、断点

2.1 设置断点

  • break + [源代码行号][源代码函数名][内存地址]
  • break … if condition
    • …可以是上述任一参数;condition 是条件。例如在循环体中可以设置 break ... if i = 100 来设置循环次数

  • tbreak:tbreak 命令可以看到是 break 命令的另一个版本,tbreak 和 break 命令的用法和功能都非常相似,唯一的不同在于,使用 tbreak 命令打的断点仅会作用 1 次,即使程序暂停之后,该断点就会自动消失。
  • rbreak:和 break 和 tbreak 命令不同,rbreak 命令的作用对象是 C、C++ 程序中的函数,它会在指定函数的开头位置打断点。

2.2 查看断点信息

(gdb) info b

若是直接执行 info 的话,出来的就是所有的调试信息:


但若是我们只想查看一下所打的断点的信息,那就在后面加个 b/breakpoint:

六个字段的含义如下:

  • Num : 编号
  • Type : 类型
  • Disp : 状态
  • Enb : 是否可用
  • Address : 地址
  • What : 在此文件的哪个函数的第几行

2.3 删除断点

(gdb) clear location

参数 location 通常为某一行代码的行号或者某个具体的函数名。当 location 参数为某个函数的函数名时,表示删除位于该函数入口处的所有断点。

(gdb) d(delete) [breakpoints] [num]

输入 breakpoints 参数表示删除所有断点;num 参数为指定断点的编号,表示删除指定编号的断点。


2.4 激活/禁用断点

(gdb) disable b(breakpoints) 	  	   # 使所有断点无效【默认缺省】
(gdb) enable b(breakpoints)  	  	   # 使所有断点有效【默认缺省】
(gdb) disable b(breakpoint) + [编号...] # 使一个或多个断点无效【禁用断点】
(gdb) enable b(breakpoint) + [编号...]  # 使一个或多个断点有效【开启断点】

(gdb) enable b(breakpoints) once [num...]   # 临时激活以 num... 为编号的多个断点,但断点只能使用 1 次,之后会自动回到禁用状态
(gdb) enable b(breakpoints) count [num...]  # 临时激活以 num... 为编号的多个断点,断点可以使用 count 次,之后进入禁用状态
(gdb) enable b(breakpoints) delete [num...] # 激活 num... 为编号的多个断点,但断点只能使用 1 次,之后会被永久删除。

2.5 观察断点

watch:此命令打的是观察断点,可以监控某个变量或者表达式的值。只有当被监控变量(表达式)的值发生改变,程序才会停止运行。

(gdb) watch cond

cond 代表的就是要监控的变量或者表达式。

rwatch 命令:只要程序中出现读取目标变量(表达式)的值的操作,程序就会停止运行;
awatch 命令:只要程序中出现读取目标变量(表达式)的值或者改变值的操作,程序就会停止运行。
catch:捕捉断点的作用是,监控程序中某一事件的发生,例如程序发生某种异常时、某一动态库被加载时等等,一旦目标时间发生,则程序停止执行。

总结:

观察断点:
watch + [变量][表达式] :当变量或表达式值改变时即停住程序。
rwatch + [变量][表达式] :当变量或表达式被读时,停住程序。
awatch + [变量][表达式]:当变量或表达式被读或被写时,停住程序。

设置捕捉点:
catch + event:当 event 发生时,停住程序。

其中,catch 指令的参数 event 参数表示要监控的具体事件。常用的 event 事件类型如下表所示:

event 事件含义
throw [exception]当程序中抛出 exception 指定类型异常时,程序停止执行。
如果不指定异常类型(即省略 exception),则表示只要程序发生异常,程序就停止执行。
catch [exception]当程序中捕获到 exception 异常时,程序停止执行。
exception 参数也可以省略,表示无论程序中捕获到哪种异常,程序都暂停执行。
load [regxep]
unload [regexp]
其中,regexp 表示目标动态库的名称,
load 命令表示当 regexp 动态库加载时程序停止执行;
unload 命令表示当 regexp 动态库被卸载时,程序暂停执行。
regexp 参数也可以省略,此时只要程序中某一动态库被加载或卸载,程序就会暂停执行。

除此之外,还有几个比较特殊的 event:

  • exec:调用系统调用 exec 时。(exec 为关键字,目前此功能只在 HP-UX 下有用)
  • fork:调用系统调用 fork 时。(fork 为关键字,目前此功能只在 HP-UX 下有用)
  • vfork:调用系统调用 vfork 时。(vfork 为关键字,目前此功能只在 HP-UX 下有用)

在这里插入图片描述

2.6 捕获信号

(gdb) handle + [argu] + signals
  • signals:是 Linux/Unix 定义的信号,SIGINT 表示中断字符信号,也就是 Ctrl+C 的信号,SIGBUS 表示硬件故障的信号;SIGCHLD 表示子进程状态改变信号; SIGKILL 表示终止程序运行的信号......
  • argu:
    • nostop:当被调试的程序收到信号时,GDB 不会停住程序的运行,但会打出消息告诉你收到这种信号。
    • stop:当被调试的程序收到信号时,GDB 会停住你的程序。
    • print:当被调试的程序收到信号时,GDB 会显示出一条信息。
    • noprint:当被调试的程序收到信号时,GDB 不会告诉你收到信号的信息。
    • pass or noignore:当被调试的程序收到信号时,GDB 不处理信号。这表示,GDB 会把这个信号交给被调试程序会处理。
    • nopass or ignore:当被调试的程序收到信号时,GDB 不会让被调试程序来处理这个信号。

2.7 线程中断

(gdb) break [linespec] thread [threadno] [if ...]
  • linespec:断点设置所在的源代码的行号。如: test.c:12 表示文件为 test.c 中的第 12 行设置一个断点。
  • threadno:线程的 ID。是 GDB 分配的,通过输入 info threads 来查看正在运行中程序的线程信息。
  • if …:设置中断条件。

3、查看信息

3.1 查看数据

(gdb) p(print) variable 查看变量
(gdb) p(print) *array@len 查看数组(array 是数组指针,len 是需要数据长度)

可以通过添加参数来设置输出格式:

  • / :按十六进制格式显示变量。
  • /d :按十进制格式显示变量。
  • /u :按十六进制格式显示无符号整型。
  • /o :按八进制格式显示变量。
  • /t :按二进制格式显示变量。
  • /a :按十六进制格式显示变量。
  • /c :按字符格式显示变量。
  • /f :按浮点数格式显示变量。

但是一个一个地去 print 太过于繁琐,于是可以用 display!

display:跟踪查看一个变量,每次停下来都显示它的值(变量/结构体…)


同理,也可以用来追踪地址信息:

如果不想追踪某个变量了,就可以用 undisplay 指令取消对该变量的追踪:

(gdb) undisplay + 变量名编号

3.2 查看内存

(gdb) x(examine) /n f u + 内存地址(指针变量)
  • n 表示显示内存长度
  • f 表示输出格式(见 print)
  • u 表示字节数制定(b 单字节;h 双字节;w 四字节;g 八字节;默认为四字节)

3.3 查看栈信息

(gdb) bt(backtrace) [-full][-n][n]
  • -full 打印栈帧信息的同时,打印出局部变量的值。
  • n 表示只打印栈顶上 n 层的栈信息。
  • -n 表示只打印栈底上 n 层的栈信息。
  • 不加参数,表示打印所有栈信息。

3.4 查看栈帧信息

(gdb) info frame

该命令会依次打印出当前栈帧的如下信息:

  • 当前栈帧的编号,以及栈帧的地址;
  • 当前栈帧对应函数的存储地址,以及该函数被调用时的代码存储的地址
  • 当前函数的调用者,对应的栈帧的地址;
  • 编写此栈帧所用的编程语言;
  • 函数参数的存储地址以及值;
  • 函数中局部变量的存储地址;
  • 栈帧中存储的寄存器变量,例如指令寄存器(64 位环境中用 rip 表示,32 为环境中用 eip 表示)、堆栈基指针寄存器(64 位环境用 rbp 表示,32 位环境用 ebp 表示)等。

除此之外,还可以使用 info args 命令查看当前函数各个参数的值;使用 info locals 命令查看当前函数中各局部变量的值。

4、运行、调试

(gdb) r(run)

运行代码。如果有断点,会在断点处停下;否则会直接运行到程序结束。

(gdb) c(continue) 

程序在断点处停下来,通过 continue 指令让程序继续执行到下一个断点,没有断点的话则直接运行到程序结束。

(gdb) n(next) n

参数 n 表示单步执行多少行代码,默认为 1 行。其最大的特点是当遇到包含调用函数的语句时,无论函数内部包含多少行代码,next 指令都会一步执行完。也就是说,对于调用的函数来说,next 命令只会将其视作一行代码。

(gdb) s(step) n

参数 n 表示一次执行的行数,默认为 1 行。通常情况下,step 命令和 next 命令的功能相同,都是单步执行程序。不同之处在于,当 step 命令所执行的代码行中包含函数时,会进入该函数内部。

(gdb) until [location]
  • 不带参数的 until 命令,可以使 GDB 调试器快速运行完当前的循环体,并运行至循环体外停止。注意,until 命令并非任何情况下都会发挥这个作用,只有当执行至循环体尾部(最后一行代码)时,until 命令才会发生此作用;反之,until 命令和 next 命令的功能一样,只是单步执行程序
  • (gdb) until location:参数 location 为某一行代码的行号

下面的例子紧接着上面 step 指令的例子:

(gdb) finish

通过 finish 函数,可以直接让一个函数执行完毕,直接回到了调用函数的位置。

该例和 until 类似:

5、编辑和搜索

(gdb) edit [location]
(gdb) edit [filename]:[location]

location 表示程序中的位置。这个命令表示激活文件的指定位置,然后进行编辑。

输入以下两种格式都可以:

在这里插入图片描述

(gdb) search <regexp>
(gdb) reverse-search <regexp>

第一项命令格式表示从当前行的开始向前搜索,后一项表示从当前行开始向后搜索。

其中 regexp 就是正则表达式,正则表达式描述了一种字符串匹配的模式,可以用来检查一个串中是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串。

Linux 【gdb】 gdb调试 阅读详情

相关推荐

Linux下gdb调试工具的使用,linux下如何使用gdb调试

大多数程序员所使用的IDE(集成开发环境)都是自带调试功能的,调试功能有什么用呢?大家编译程序时发现的问题是语法或链接问题,能编译通过只能说明我们的程序在语法和链接时未产生错误,但不能说明我们程序就是完全正确的,因为程序的业务逻辑问题是在执行时才会发现的,所以我们会发现有很多初学编程的朋友就总会说明明我程序编译通过啦,为什么执行不出来结果或在执行时发生了错误呢,这就是为什么要有调试这一环节,调试的目的就在于发现程序中的业务逻辑问题,一般使用IDE的可以直接使用自带的调试工具进行程序运行调试,那如果我...

学到牛牛官网帐号 962

【Linux】gdb的使用

Linux下gdb的使用

爱打酱油的新一的博客 1134

【Linux】Linux下调试器gdb的使用

debug和release版本的认识、gbd指令集、图文演示gdb的使用

StackFrame 4473

Linux中gdb的使用

gdbj就是用来调试的工具,在Linux中写代码,vim为编辑器,gcc/g++为编译器,gdb为调试工具。gdb的使用虽然并不容易,但必须学会使用,毕竟,写代码总会出现bug的。要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。因为在Linux中默认为release版本。注意:这么多指令需要理解记忆,和Windows系统上的IDE对比记忆,更好的应用这些指令。这两条指令是最简单的,也是最容易掌握的。进入:gdb 文件名。2.1 gdb的进入和退出。2.2 gdb常用操作。

weixin_66828150的博客 829

手把手教你配置C6678的SPI启动:从NorFlash烧写到多核加载的完整流程

本文详细介绍了TMS320C6678多核DSP的SPI启动全流程,包括硬件准备、镜像文件生成与转换、NorFlash烧写与验证、多核启动同步机制以及常见问题排查。通过实战演示,帮助开发者高效配置SPI启动模式,解决启动失败、多核同步异常等问题,提升嵌入式系统开发效率。

weixin_27076351的博客 150

Linux 内核中 ARP 协议的全链路解析:从触发机制到物理层发送

核心设计思想按需解析:减少不必要的 ARP 请求,降低网络负载。分层解耦:协议栈各层(邻居子系统、Netfilter、驱动)职责分离,提高扩展性。ARP的核心作用是将IP映射为MAC地址,确保数据链路层能正确封装帧。其触发时机围绕“未知MAC地址需求”展开,覆盖通信初始化、缓存更新、网络变更及维护等多种场景。

数字人生 367

【Linux】——调试器-gdb的使用

【Linux】——调试器-gdb的使用

m0_56069910的博客 4014

python基础:工作会用到的90%的python代码都在这了(万字详解!)

Python 备忘单是 Python 3 编程语言的单页参考表 著名的“Hello World”程序在 Python 中的实现 Python 不能在没有赋值的情况下声明变量 变量可以存放不同类型的值 内置数据类型 序列指一批有序的元素,集合指一批无序且不重复的元素查看: 数据类型 查看: 字符串 查看: 列表 查看: 判断 查看: 循环 查看: 函数 查看: 文件处理 表示 x 和 y 的商, 表示 x 和 y 的底商,另见 StackOverflow f-字符串 (Python 3.6+) 查看

数据知道的博客 1万+

【Linux】gdb 的使用

gdb 的使用

Locky136的博客 1012

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4128

uniapp - H5网页打包运行报错Failed to load resource: net::ERR_FILE_NOT_FOUND(uniApp打包成H5部署到服务器,打包h5白屏并报错页面空白)

Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp 坑之打包之后白屏,uniapp打包h5,HBuilderX 打包H5后空白报错 Failed to load resource: net::ERR FILE NOT_FOUND,UNI-APP H5应用白屏(空白页)解决方案,白屏并报错Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp开发,打包成H5部署到服务器,uniapp打包之后首页

🏆 前端领域优质创作者 3576

【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)

GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于以后想称为一个Linux下工作的c/c++程序员,GDB是必不可少的工具,所以本篇来从零讲解GDB在LInux的调试。 对于GDB调试器来说,不像VS编译器中那样的图形化界面形式,而是采用纯命令行的形式进行调试。so 在开始学习的时候,大家可能会感觉晦涩难懂,但是这是C/C++程序员必须要掌握的技能,所以我将手把手进行零基础的讲解,本篇以C语言来讲解和调试。

weixin_45031801的博客 13万+

【ArcGIS Pro微课1000例】0047:深度学习--棕榈树提取全流程

对汤加科洛瓦伊种植园每棵棕榈树的健康状况进行清查和评估,这需要花费大量的时间和劳动力。为简化此过程,将在 ArcGIS Pro 中使用深度学习模型来识别树木,然后根据植被绿度的测量值计算其健康状况。第一步是找到显示汤加科洛瓦伊的影像,该影像具有足够精细的空间和光谱分辨率来识别树木。获得此影像后,将创建训练样本并将其转换为可供深度学习模型使用的格式。为了让模型识别出它的查找任务,需要定义棕榈树的影像,以便识别相似的像素和树木大小。

智慧空间实验室 2205

Linux中GDB安装与使用

前言 gdb是Linux环境下的代码调试工具,为了能在linux环境下更有好的编程体验。其安装可谓是势在必行。 安装过程 安装gdb的过程很简单,具体步骤如下: 查看当前gdb安装情况 rpm -qa|grep gdb if(有)(删除) rpm -e --nodeps 文件名 if(没有) 首先(下载gdb源码包),直接在Linux中输入 wget http://ftp.gnu.org/gnu/gdb/gdb-7.10.1.tar.gz 解压 tar -zxf gdb-7.10.1.tar.gz 进

weixin_46048542的博客 2万+

树冠体积计算之体元累加法

因为是自己之前研究的一个方向,就复现了一下论文中的这个方法,在此正好记录一下。 文章目录一、简介二、代码实现(MATLAB)三、小结 一、简介 简而言之,其实就是一句话,即以固定大小的体元模拟不规则的树冠形状。按照论文中的思路主要就是将树冠沿树高方向以 k 为步长进行等距离分段,把每一段树冠的点投影到垂直于树高方向的平面上,再对该平面划分成大小为 k × k 的像元,根据投影到各个像元内点的数量,判断该像元的有效性,统计有效像元的数量 T,则树冠体积为 T 个 k × k × k 的体元之和。如下图所示:

dayuhaitang1的博客 2605

从零开始理解Linux中断架构(1)-前言

前段时间在转行手撸WIFI路由器,搞wifi路由器需要理解网络驱动程序,以太网卡驱动程序,无线WIFI驱动程序,而网卡驱动的关键路径就在中断程序中,需要了解NIC设备驱动程序如何收发数据,为了彻底的知道数据包是如何二层传递上来的,又需要了解一点Linux中断系统。第一次看到这张表是无感的,大概能够看懂的就是那个中断次数,因为不停的cat,这个数值会一直不停的增加。第一列是逻辑中断号,第二三列是中断次数,第四列是中断控制器的名字,第五列是硬件中断号,第六列 中断类型,第七列是 中断源关联设备。

maxleng的专栏 880

linux 上使用gdb

dir 命令可以将源文件目录添加到 GDB 的搜索路径中,方便查看其他文件中的代码。) 分别向前和向后搜索指定的正则表达式。使用 info breakpoints (或 i b) 命令可以查看所有已设置的断点信息,包括断点编号、类型、位置、条件等。在 GDB 中,断点是调试过程中非常重要的工具,它允许在程序执行到特定位置时暂停,以便检查程序状态、变量值等信息。list 命令 (或 l) 是最常用的查看代码命令,它可以显示当前执行位置附近的代码。frame 命令可以切换到不同的栈帧,并显示对应栈帧的代码。

heeheeai的博客 1529

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

linux—常用gdb调试命令汇总

如果是函数递归调用,当还没开始递归时,finish会执行完整个函数,自动走完全部递归过程(前提无断点)。因为在linux系统下,默认生成的可执行程序是release版,但是调试需要debug版本。*gdp会自动记录最近的命令,如果没有输入其他命令,可以按enter键继续执行最近命令。需要注意的是,不能直接写变量名,变量编号使用infodisplay即可知道。如果我们需要在调试中一直显示某个变量的值,那么就需要display命令了。需要注意的是,这种方法只能显示一次变量值,当继续调试时变量不再显示。...

weixin_61857742的博客 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

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

Linux·gdb用法详解

gdb(GNU Debugger)是一个强大的调试工具,广泛用于调试 C、C++、Fortran 和其他编程语言的程序。gdb 支持多种调试功能,包括断点、单步执行、变量查看、内存操作和多线程调试等。通过合理使用这些功能,可以有效地定位和解决程序中的错误。本文详细介绍了release版本与debug版本的区别,gdb调试过程中的各种命令。

czy02的博客 4808

【Linux】Linux下的调试器-gdb的使用

该博客讲了release和debug两个模式的区别,接着主要讲了如何在Linux下使用gdb调试代码,按照步骤一次操作,给出了操作图。最后给出了gdb操作的指令集,如果对gdb很熟悉可以直接使用该指令集查看,写的不好,各位大佬多多指点

m0_52094687的博客 3943

Linux之GDB调试

GDB 是一个开源的、功能强大的调试工具,主要用于调试 C、C++ 等语言编写的程序。它支持多种操作系统和架构,能够帮助开发者在程序运行过程中暂停执行、查看变量值、修改程序状态等,从而快速定位和修复问题。断点是调试过程中非常重要的工具,它可以让程序在指定的位置暂停执行,方便我们查看程序状态。当程序出现异常时,查看调用栈可以帮助你了解程序的执行路径。它会从当前栈帧开始,向上列出所有调用栈帧的信息,包括函数名、文件名、行号等。如果你在启动 GDB 时已经指定了程序参数,可以直接输入。

zzh_Zao的博客 4360

Linux调试器gdb

前面我们介绍了gcc/g++的使用,我们知道在VS平台下编写代码是可以调试的,调试是我们经常使用的纠错手段,在Linux平台下也有相关的调试工具,那就是gdb,调试是我们必须掌握的技能,没有调试项目的错误就无法快速解决!​相信gdb的学习可以助力你在Linux相同上更顺利的构建大型工程,从容的面对各种bug,虽然在使用上与VS还有些差异,但是配合Linux上的其他工具一定可以使效率有一定的提升!

ARMCSKGT的博客 3733

【Linux】开始使用gdb吧!

本文较为全面的罗列了gdb 的常用指令。并实践了常用的指令

叫我龙翔的博客 2457

linux gdb 调试 权限,linux下GDB调试

linux下GDB是一个非常强大的调试工具,但是他不像vs一样具有强大的图形界面,基本都靠命令来进行调试,对于新手来说也算是个坎。下面就跟大家一起探究一下gdb这个强大的调试工具。1.开启core1.1 查看core是否开启$ulimit -c00:表示关闭,不会生成core文件;否则此值说明core文件的最大限制;1.2 打开开启core打开/etc/profile$sudo gedit /et...

weixin_31746149的博客 1372

Linux工具学习之【gdb】

vim可以编写代码,gcc/g++可以编译代码,此时只最后一件神器,就能进行完整的开发工作,那就是通过gdb调试代码,毕竟谁都不敢保证自己的代码没有问题,所以就有调试器这种东西帮助我们定位问题,进而解决问题。

北 海的博客 3853

【Linux】gdb调试器的使用

GDB 全称“GNU symbolic debugger”,是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go 等等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。

m0_65679465的博客 7397
上一篇: FreeRTOS 快速入门(九)之软件定时器
下一篇: 蓝牙BLE协议讲解
Projectsauron
博客等级 码龄4年 2587粉丝 100原创
评论 35
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值