学习--GDB调试

在ubuntu上安装leveldb并gdb调试学习leveldb ubuntu上安装leveldb leveldb的代码笔者已经断断续续看了半年,大致原理已经了解,现在想将leveldb安装到虚拟机上通过gdb或者打印日志的方式跟踪学习以便理解的更加透彻。看了网上的安装指南,感觉soeasy,没想到还是有一些坑,现在总结下来: vmvare的链接方式 为了能够在虚拟机上使用wget或者yum安装,必须是虚拟机能够联网(笔者在vmvare上安装ubuntu)。联网... 阅读详情
3.2 载入程序 === file
在GDB内,载入程序很简单,使用file命令。如file hello。当然,程序的路径名要正确。
退出GDB === quit
在GDB的命令方式下,输入quit,你就可以退出GDB。你也可以输入'C-d'来退出GDB。
3.3运行程序 === run
当你在GDB中已将要调试的程序载入后,你可以用run命令来执行。如果你的程序需要参数,你可以在run指令后接着输入参数,就象你在SHELL下执行一个需要参数的命令一样。
3.4查看程序信息 === info
info指令用来查看程序的信息,当你用help info查看帮助的话,info指令的参数足足占了两个屏幕,它的参数非常多,但大部分不常用。我用info指令最多的是用它来查看断点信息。
3.4.1 查看断点信息
info br
br是断点break的缩写,记得GDB的补齐功能吧。用这条指令,你可以得到你所设置的所有断点的详细信息。包括断点号,类型,状态,内存地址,断点在源程序中的位置等。
3.4.2 查看当前源程序
info source
3.4.3 查看堆栈信息
info stack
用这条指令你可以看清楚程序的调用层次关系。
3.4.4 查看当前的参数
info args
3.5 列出源一段源程序 === list
3.5.1 列出某个函数
list FUNCTION
3.5.2 以当前源文件的某行为中间显示一段源程序
list LINENUM
3.5.3 接着前一次继续显示
list
3.5.4 显示前一次之前的源程序
list -
3.5.5 显示另一个文件的一段程序
list FILENAME:FUNCTION 或 list FILENAME:LINENUM
3.6 设置断点 === break
现在我们将要介绍的也许是最常用和最重要的命令:设置断点。无论何时,只要你的程序已被载入,并且当前没有正在运行,你就能设置,修改,删除断点。设置断点的命令是break。有许多种设置断点的方法。如下:
3.6.1 在函数入口设置断点
break FUNCTION
3.6.2 在当前源文件的某一行上设置断点
break LINENUM
3.6.3 在另一个源文件的某一行上设置断点
break FILENAME:LINENUM
3.6.4 在某个地址上设置断点,当你调试的程序没有源程序是,这很有用
break *ADDRESS
除此之外,设置一个断点,让它只有在某些特定的条件成立时程序才会停下,我们可以称其为条件断点。这个功能很有用,尤其是当你要在一个程序会很多次执行到的地方设置断点时。如果没有这个功能,你必须有极大的耐心,加上大量的时间,一次一次让程序断下,检查一些值,接着再让程序继续执行。事实上,大部分的断下并不是我们所希望的,我们只希望在某些条件下让程序断下。这时,条件断点就可以大大提高你的效率,节省你的时间。条件断点的命令如下,在后面的例子中会有示例。
3.6.5 条件断点
break ...if COND
COND是一个布尔条件表达式,语法与C语言中的一样。条件断点与一般的断点不同之处是每当程序执行到断点处,都要计算条件表达式,如果为真,程序才会断下,否则程序会一直执行下去。
3.7 其它断点操作
GDB给每个断点赋上一个整数数字,这个数字在操作断点时起到重要作用,它实际上就代表相应的断点。GDB中的断点有四种状态:
有效(Enabled)
禁止(Disabled)
一次有效(Enabled once)
有效后删除(Enabled for deletion)
在上面的四个状态有效和禁止都很好理解,禁止就是让断点暂时失效。一次有效就是当程序在此断点断下后,断点状态自动变为禁止状态。有效后删除就是当程序在此断点断下后,断点被删除。实际上,后两种状态一般不会碰到。
当你设置一个断点后,它的确省状态是有效。你可以用enable和disable指令来设置断点的状态为有效或禁止。例如,如果你想禁止2号断点,可以用下面的指令:
disable 2
相应的,如果想删除2号断点,可以有下面的指令:
delete 2
3.8 设置监视点 === watch
当你调试一个很大的程序,并且在跟踪一个关键的变量时,发现这个变量不知在哪儿被改动过,如何才能找到改动它的地方。这时你可以使用watch命令。简单地说,监视点可以让你监视某个表达式或变量,当它被读或被写时让程序断下。watch命令的用法如下:
watch EXPRESSION
watch指令是监视被写的,当你想监视某个表达式或变量被读的话,需要使用rwatch指令,具体用法是一样的。要注意的是,监视点有硬件和软件两种方式,如果可能Linux尽可能用硬件方式,因为硬件方式在速度上要大大快于软件方式。软件方式由于要在每次执行一条指令后都要检查所要监视的值是否被改变,因此它的执行速度会大大降低。同时它也无法设置成被读时让程序断下,因为读操作不会改变值,所以GDB无法检测到读操作。幸运的是,目前的PC机基本都支持硬件方式。如果你想确认一下你的机器是否支持硬件,你可以在调试程序时用watch设置一个监视点,如果GDB向你显示:
Hardware watchpoint NUM: EXPR
那么你可以放心了,你的机器支持硬件方式。
3.9 检查数据
最常用的检查数据的方法是使用print命令。
print exp
print指令打印exp表达式的值。却省情况下,表达式的值的打印格式依赖于它的数据类型。但你可以用一个参数/F来选择输出的打印格式。F是一个代表某种格式的字母,详细可参考输出格式一节。表达式可以是常量,变量,函数调用,条件表达式等。但不能打印宏定义的值。表达式exp中的变量必须是全局变量或当前堆栈区可见的变量。否则GDB会显示象下面的一条信息:
No symbol "varible" in current context

3.10 修改变量值
在调试程序时,你可能想改变一个变量的值,看看在这种情况下会发生什么。用set指令可以修改变量的值:
set varible=value
例如你想将一个变量tmp的值赋为10,
set tmp=10
3.11 检查内存值
检查内存值的指令是x,x是examine的意思。用法如下:
x /NFU ADDR
其中N代表重复数,F代表输出格式(见2.13),U代表每个数据单位的大小。U可以去如下值:
b :字节(byte)
h :双字节数值
w :四字节数值
g :八字节数值
因此,上面的指令可以这样解释:从ADDR地址开始,以F格式显示N个U数值。例如:
x/4ub 0x4000
会以无符号十进制整数格式(u)显示四个字节(b),0x4000,0x4001,0x4002,0x4003。
3.12 输出格式
缺省情况下,输出格式依赖于它的数据类型。但你可以改变输出格式。当你使用print命令时,可以用一个参数/F来选择输出的打印格式。F可以是以下的一些值:
'x' 16进制整数格式
'd' 有符号十进制整数格式
'u' 无符号十进制整数格式
'f' 浮点数格式
3.13 单步执行指令
单步执行指令有两个step和next。Step可以让你跟踪进入一个函数,而next指令则不会进入函数。
3.14 继续执行指令
当程序被断下后,你查看了所需的信息后,你会希望程序执行下去,输入 continue, 程序会继续执行下去。
3.15 帮助指令help
在GDB中,如果想知道一条指令的用法,最方便的方法是使用help。使用方法很简单,在help后跟上指令名。例如,想知道list指令用法,输入
help list

4.一个简单的例子
上面仅是GDB常用指令的简单介绍。本节将结合一个简单的例子,向大家演示这些常用指令的具体应用。这是一个冒泡排序算法的程序,这个例子的目的仅仅是演示,并不是实际调试。将下面的源程序存为bubble.c文件,并编译好。

#include
#define MAX_RECORD_NUMBER 10

int record[MAX_RECORD_NUMBER] =
{12,76,48,62,94,17,37,52,69,32};

swap(int * x , int * y )
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}

int main()
{
int i,j;
for( i = 0 ; i < MAX_RECORD_NUMBER - 1; i++ )
{
for( j = MAX_RECORD_NUMBER - 1; j > i; j--)
if( record[j] < record[j-1] )
swap(&record[j],&record[j-1]);
}

for( i = 0; i < MAX_RECORD_NUMBER -1; i++)
printf("%d ",record[i]);

printf("/n");
return 1;
}


记得在编译时用-g开关。如:gcc -g -o bubble bubble.c。你能在当前子目录下得到一个编译好的文件bubble。我们下面将以这个程序为例子向大家演示上面的指令在实际中的应用。
首先启动GDB,可以在启动的同时载入文件bubble,如:gdb bubble。也可以分两步进行,先启动GDB,执行gdb,进入GDB后,再执行file bubble。
这时可以用list指令列出源程序,list的使用比较简单,但其实在GDB中最不方便的就是看源程序,主要原因是因为GDB仅是一个文本方式的调试器,无法让你用鼠标和光标键来翻阅源程序,在这方面ddd等窗口程序有巨大的优势。
我们先来查看一下当前源程序的信息,如下:
(gdb) info source
Current source file is bubble.c
Compilation directory is /root/sample/
Located in /root/sample/bubble.c
Contains 32 lines.
Source language is c.
Compiled with stabs debugging format.
我们可以知道程序名,目录,文件大小,语言等信息。
下面我们来设置断点,我们想在函数swap出设置一个断点:
(gdb) br swap
Breakpoint 1 at 0x80483d6: file bubble.c, line 11.
br是break的简写。上面的一行是GDB告诉我们这个断点的信息,我们可以知道这个断点的断点号是1,地址是0x80483d6,它在文件bubble.c的11行。
我们再在一个行号上设一个断点,

(gdb) br 23
Breakpoint 2 at 0x804844a: file bubble.c, line 23.
我们已经设了两个断点,许多时候你会想查看一下断点的信息和状态,因此你会用到你最常使用的info指令,info br。
(gdb) info br
Num Type Disp Enb Address What
1 breakpoint keep y 0x080483d6 in swap at bubble.c:11
2 breakpoint keep y 0x0804844a in main at bubble.c:23
我用这条指令的大多数原因是想查看一下某个断点的断点号,就是第一列的数值。有时也会看一下断点的状态是enable还是disable。以上的两个断点都是y,也就是都处于enable状态。type列显示breakpoint,是因为info br指令同时也会显示watch的信息,因此用type来识别是断点breakpoint还是检查点watch。
如果你知道断点号,想删除断点很简单,例如想删除断点2,执行del 2就行了。
在程序中,断点2本来设在循环中,那样程序会频烦断下,这也许不是我们希望的。也许我们仅想在某个条件下让它断下,如想当j=5时。
(gdb) br 23 if j==5
Breakpoint 3 at 0x804844a: file bubble.c, line 23.
(gdb) info br
Num Type Disp Enb Address What
1 breakpoint keep y 0x080483d6 in swap at bubble.c:11
3 breakpoint keep y 0x0804844a in main at bubble.c:23
stop only if j == 5
注意现在的断点信息,虽然断点2被删除了,但新设的断点号没有使用2号,而是使用了3号。新设的断点是个条件断点,这从"stop only if j == 5"可以清楚的看出。
现在执行程序,输入run指令。
(gdb) run
Starting program: /root/sample/bubble
Breakpoint 1, swap (x=0x80495a4, y=0x80495a0) at bubble.c:11
11 temp = *x;

程序已经在断点1停了下来。当断点停下时,我们经常需要查看变量值。如查看x值。

(gdb) p x

$1 = (int *) 0x80495a4

GDB告诉我们x是一个指向整数的指针,指针值是0x80495a4。如果想查看指针指向的值。执行:

(gdb) p *x

$2 = 32

(gdb) p *y

$3 = 69

单步执行

(gdb) n

12 *x = *y;

查看变量temp值

(gdb) p temp

$4 = 32

(gdb) n

13 *y = temp;

(gdb) p *x

$5 = 69

现在删除断点1

(gdb) del 1

继续执行

(gdb) cont

Continuing.


Breakpoint 3, main () at bubble.c:23

23 swap(&record[j],&record[j-1]);

程序在断点3停下,记得断点3是个条件断点。要验证很简单,查看一下变量j的值是不是5。

(gdb) p j

$6 = 5

我们可以查看一下全局变量record的值,

(gdb) p record

$7 = {12, 76, 48, 62, 94, 17, 32, 37, 52, 69}

也可以查看一下变量record的地址,

(gdb) p &record

$8 = (int (*)[10]) 0x8049580

知道地址时,也可以x指令查看内存值。

(gdb) x/4uw 0x8049580

0x8049580 : 12 76 48 62

上面的指令查看4个4字节数,以整数方式显示。可以看到这与reocrd值是相附的。

(gdb) x/4bb record

0x8049580 : 12 0 0 0

显示4个单字节数,以字节当时显示。上面的4个字节值正好是record数组第一个整数值,因为整数是4字节,而且intel机器的数值是低字节在前。

改变变量值也很简单,如果想将reocrd数组第一个值该为1,

(gdb) set record[0]=1

看一下值是否改变了。

(gdb) p record

$10 = {1, 76, 48, 62, 94, 17, 32, 37, 52, 69}

第一个值以改成了1。
以上简单地介绍了一些常用的GDB指令,由于篇幅所限,我们无法涉及GDB所有指令及GDB其它许多功能,读者应当自己在实践中不断地学习。Linux系统中会有详细的GDB的资料,你可以用info gdb来查阅这些资料。
VisualStudio2022配置CGAL vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。 阅读详情

相关推荐

cesium加载天地图、OSM、谷歌底图

以上示例是加载矢量底图,若要加载影像或者其他只需要更换相应的url,在WebMapTileServiceImageryProvider中还要更改layer参数。url中’‘vec_w’,一些其他风格,基于CRAT渲染,两种方法效果差别不大。有两种方法加载天地图分别是。对应投影样式,具体可看。还要谷歌的一些卫星底图。

qq_44897914的博客 2997

【开发工具】【gdb】编译工具(gdb)的使用

参考文章: http://qiusuoge.com/15831.html c出错的时候: https://blog.youkuaiyun.com/bailyzheng/article/details/7488664 在对嵌入式进行调试之前,必须要生成调试器。经典地,Linux平台下的调试器为gdb。 1、下载gdb: 下载地址为: http://www.gnu.org...

诸葛一帆丶的博客 1358

MIT Mini Cheetah--仿真流程

MIT Mini Cheetah–仿真 摘要 由于官方提供代码中,控制仿真环境中的猎豹机器人运动需要遥控器来控制。官方默认推荐使用logitech Gamepad F310游戏手柄:We use the Logitech F310 controller. There’s a switch in the back, which should be in the “X” position. The controller needs to reconnected if you change the switch

Galaxy_Robot的博客 5915

Linux开发工具(6)——gdb

为什么程序要有debug和release版本呢,首先debug包含调试信息,程序员可以对程序进行调试,但是用户不需要进行调试,因为我们不能给用户他不需要的东西,所以release版本呢就是去掉了调试信息并优化了可执行程序的速度。当我进入Add函数中的时候,使用finish就可以直接跑完Add函数的逻辑,并且显示函数的参数,所在文件中的行号,函数地址,以及该函数在主函数中调用的位置,还有返回值是多少。当我们使用display将i变量常显示之后,随着代码的执行,i变量的值也会跟着变化。输入y就重头开始了。

qq_62745420的博客 572

Open3D:Win10 + VS2017配置Open3D(C++、python)

一、下载源码 地址:https://github.com/intel-isl/Open3D 1.1 克隆源码【笔者的源码路径为D:\Open3D\Open3D】 1.2 切换版本【笔者的版本为0.8.0】 1.3 更新子模块【用于获取第三方库!很重要!】 二、CMake编译 2.1 设置路径 【source code: D:\Open3D\Open3D;build binaries: D:\Open3D】 【笔者设置CMAKE/CMAKE_INSTALL_PREFIX的路径为D:/Open.

累了就要打游戏 1万+

生信入门(六)——单细胞分析(Seurat)

生信入门(六)——单细胞分析(Seurat) 文章目录生信入门(六)——单细胞分析(Seurat)一、数据导入1、数据来源2、数据导入二、标准预处理1、QC和选择细胞进行进一步分析2、规范化数据3、识别高度可变的特征(特征选择)4、缩放数据三、主成分分析(PCA)1、线性降维2、确定数据集的“维度”四、聚类细胞五、非线性降维(UMAP/tSNE)六、寻找差异表达的特征(簇生物标志物) 一、数据导入 1、数据来源 点击此处下载数据 数据说明:分析10X Genomics提供的外周血单细胞(PBMC)数据集,有

羊羊的博客 6万+

gdb调试解决找不到源代码的问题

通过 `gdb` 启动程序,打好断点运行,开始调试输入 `list` 命令,结果发现找不到源代码,是不是很糟心,让我们来看看怎么解决这种情况...

AlbertS Home of Technology 2万+

超融合架构实战:如何用3节点搭建企业级分布式存储系统?

本文详细介绍了如何利用3节点搭建企业级分布式存储系统的超融合架构实战指南。从硬件选型、网络配置到存储策略调优,提供了全面的实操建议和性能优化技巧,帮助企业实现高效、弹性的IT基础设施。特别适合需要简化运维、提升存储性能的中型企业参考。

weixin_29200485的博客 325

GDB命令

1.display var 当程序运行停止时(next,step,遇到断点停止,watch过的值变化导致程序停止等)会显示之前display过的值(当然这个值是在当前上下文可见) 2.watch var watch过的值变化时会导致程序停止,并显示变量值。监视点的设定不依赖于断点的位置,但是与变量的作用域有关,也就是说,要设置监视点必须在程序运行时才可设置。在不确定发生问题的地方时,...

kh815的博客 1855

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3316

RAP 通用搜索实战:用 CDS 注解打造 Fiori Elements 的一体化检索体验

RAP应用中的通用搜索优化实践:通过CDS注解实现高效模糊匹配 摘要:本文介绍了在SAP RAP应用中优化列表搜索体验的方法。通过CDS注解配置通用搜索功能,用户无需指定字段即可在多字段中模糊匹配数据。关键实现包括:1)使用@Search.searchable启用全局搜索;2)通过@Search.defaultSearchElement标记核心搜索字段;3)利用@Search.fuzzinessThreshold设置容错阈值(0.7-1.0)处理拼写错误;4)使用@Search.ranking优化结果排序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1397

Linux下编译调试C程序(GCC,GDB)

GDB的命令很多,本文不会全部介绍,仅会介绍一些最常用的。在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能。它就如同Linux下 SHELL中的命令补齐一样。当你输入一个命令的前几个字符,然后输入TAB键,如果没有其它命令的前几个字符与此相同,SHELL将补齐此命令。如果有其它命令的前几个字符与此相同,你会听到一声警告声,再输入TAB键,SHELL将所有前几个字符与此相同的命令全部列出。而

guoguo295的专栏 1322

基于MATLAB的语音声强度和响度分析及处理

综上所述,本文介绍了如何使用MATLAB进行语音信号的声强度和响度分析,并提供了相应的源代码。通过这些工具和方法,可以更好地理解和处理语音信号的声强度和响度特性,为语音信号处理和音频应用提供支持。声强度(Intensity)和响度(Loudness)是语音信号中常用的两个重要参数,用于描述声音的强度和感知响度。响度均衡化:可以通过对语音信号施加不同的加权滤波器,调整信号的频谱分布,从而改变声音的响度。除了分析语音信号的声强度和响度,MATLAB还提供了丰富的工具和函数,用于处理语音信号的声强度和响度。

COWizard的博客 617

gdb调试工具学习

GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲...

baodiceng4914的博客 145

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Linux】GDB/CGDB 调试器学习笔记

CGDB 是基于 curses 的终端调试界面,提供源代码与 GDB 窗口的分屏显示,键盘操作类似 vi ([cgdb.github.io][5])。使用 GDB Python API,编写自定义命令和输出美化功能 ([Reddit][12])。示例:定义函数自动打印$arg0,能在断点时执行一系列操作 ([Medium][13])。

YZJincsdn的博客 1001

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【GDB调试学习笔记】GDB调试入门

无敌三脚猫的专栏 577

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

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

Linux下gdb调试学习

Linux下gdb调试入门学习 以test.cpp为例: #include <iostream> #include <vector> int main() { std::vector<int> as; int sum=0; for (i...

ouyangfushu的博客 1210

caffe深入学习---学习GDB调试

目前简单的跑了一些常用的模型,但是深感对caffe了解还是不够,所以继续深入学习caffe. 首先,参考了知乎的一个回答,深度学习caffe的代码怎么读? Gein Chen,准备就按照人家的流程走一下,希望能够多学点东西。 1.程序跑起来,已经实现了 2.caffe单步调试。参考caffe使用gdb单步调试及源码阅读,这一篇写的很详细,很贴心。 要调试,准备用gdb,那么就学习一下,参考博客,l...

小膜仙的博客 397

C++网络编程入门学习(四)-- GDB 调试 学习 笔记

GDB(GNU Debugger)是一款功能强大的调试工具,广泛应用于C、C++等编程语言的调试过程中。本文旨在记录GDB调试的学习笔记,帮助开发者快速掌握其核心功能和使用技巧。 GDB的基本命令包括启动调试、设置断点、查看变量值、单步执行等。通过GDB,开发者可以深入分析程序的运行状态,定位并修复代码中的错误。GDB还支持多线程调试、远程调试等高级功能,适用于复杂的调试场景。 本文详细介绍了GDB的常用命令及其使用场景,并结合实际案例演示如何利用GDB进行高效的调试。无论是初学者还是有经验的开发者,都

小L的博客 883

如何学习 gdb?如何学习 Linux C/C++ 调试?

等你熟悉了 Linux 命令行之后,学习 gdb 就容易一点了,但是还是要多练,常用的 gdb 命令并不多,但是也需要一些调试和操作系统的基础知识,如断点、调用堆栈、线程等概念,如果你已经了解了这些基础概念之后,学习 gdb 就不难了,只要你肯练习,十分钟内足可掌握,但是要灵活使用 gdb 调试还是需要多加练习,建议用 gdb 去调试一些工业级的开源项目,例如 Nginx、Redis 这样的源码。介绍了实际工作中 gdb 的各种高级调试技巧,例如如何显示超长字符串、如何使用 gdb 调试多进程程序等等;

张小方的博客 634

GDB调试学习

GDB调试学习

weixin_42888638的博客 745

GDB调试命令学习

GDB是什么调试程序程序中出现语法错误可以借助编译器解决,但逻辑错误则只能靠自己解决,所谓调试(Debug)就是让代码一步步慢慢执行,跟踪程序的运行过程。比如,可以让程序stop在某行,查看下当前所有变量的值,或者内存中的数据,也可以让程序一次执行单步,或者多步语句,看看程序到底执行了哪些代码。GDB支持多种编程语言编写的程序,包括C,C++,Object-C等,实现功能:a)程序启动时,可以按照我们自定义的要求运行程序,例如设置参数和环境变量;

weixin_43163941的博客 631

GDB调试的学习

很早就想在好好学一学gdb了,正好最近学算法(以前一直以为干硬件不需要什么特别厉害的算法,结果现在卷起来了。大厂面试题也有复杂一些的算法了)下面的这些命令是别的博主总结的。

qq_52479948的博客 1167

【GDB】GDB调试学习小结

0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢! GDB version: 8.1.0.20180409-git 系统版本:Ubuntu 18.04.4 LTS \n \l 最后更新:2021-11-19 0x01 学习小结 1.GDB简介 (1)GDB是什么? GDB, the GNU Project debugger, allows you to see what is going on `inside’ another program

C/C++攻城狮 1092

gdb调试学习与实践笔记-- 启动调试

gdb调试实践笔记 gdb安装及基本使用 yum install gdb 调试程序时,为了能清晰地看到调试的每一行代码、调用的堆栈信息、变量名和函数名等信息,需要调试程序含有调试符号信息,在使用gcc编译程序时,加上-g选项。 gcc -g -o xxx xxx.c 判断调试程序是否带有调试信息? 使用 gdb 来调试一下该程序,gdb 会显示正确读取到该程序的调试信息,在终端输入gdb test查看显示结果即可: 不加-g 进行测试: 【注】:...

baidu_41388533的博客 309

Linux学习——GDB调试

Linux——GDB调试GDB简介GDB下载和安装GDB调试C/C++的过程GDB run(r)命令:启动程序GDB break(b):设置断点GDB watch命令:监控变量值的变化GDB catch命令:建立捕捉断点GDB条件断点(condition命令)GDB单步调试程序GDB print和display命令:查看变量的值GDB禁用和删除断点GDB handle命令:信号处理GDB frame和backtrace命令:查看栈信息GDB编辑和搜索源码GDB help命令:查看目标命令的具体用法 GDB简

weixin_45243288的博客 3968
上一篇: 程序控制外部程序(VB.Net版)
下一篇: C# 读取写入excel单元格
CSharp2009
博客等级 码龄19年 0粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值