gdb是什么意思(GDB 的 7 个单步调试命令)

2023-03-24 21:12 资讯百科
最佳答案 即使是复杂的函数,也有几种方法可以单步调试,所以下次在排除代码故障时,可以尝试一下这些 GDB 技术。 调试器是一个可以运行你的代码并检查问题的软件。G..

gdb是什么意思(GDB 的 7 个单步调试命令)

即使是复杂的函数,也有几种方法可以单步调试,所以下次在排除代码故障时,可以尝试一下这些 GDB 技术。

调试器是一个可以运行你的代码并检查问题的软件。GNU Debugger(GBD)是最流行的调试器之一,在这篇文章中,我研究了 GDB 的step命令和其他几种常见情况的相关命令。step是一个被广泛使用的命令,但它有一些人们不太了解的地方,可能会使得他们十分困惑。此外,还有一些方法可以在不使用step命令的情况下进入一个函数,比如使用不太知名的advance命令。

1、无调试符号

考虑以下这个简单的示例程序:

#include 

如果你在没有 调试符号debugging sysbols 的情况下进行编译(LCTT 译注:即在使用 gcc编译程序时没有写-g选项),然后在bar上设置一个断点,然后尝试在这个函数内使用step来单步执行语句。GDB 会给出一个 没有行号信息no line number information 的错误信息。

gcc exmp.c -o exmp
gdb ./exmp
(gdb) b bar
Breakpoint 1 at 0x401135
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, 0x0000000000401135 in bar 
(gdb) step
Single stepping until exit from function bar,
which has no line number information.
i = 2
0x0000000000401168 in main 

2、stepi 命令

但是你仍然可以在没有行号信息的函数内部单步执行语句,但要使用 stepi命令来代替stepstepi一次只执行一条指令。当使用 GDB 的stepi命令时,先做display/i $pc通常很有用,这会在每一步之后显示程序计数器program counter 的值和相应的机器指令machine instruction:

(gdb) b bar
Breakpoint 1 at 0x401135
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, 0x0000000000401135 in bar 
(gdb) display/i $pc
1: x/i $pc
=> 0x401135 

在上述的 display命令中,i代表机器指令,$pc表示程序计数器寄存器(即 PC 寄存器)。

使用 info registers命令,来打印寄存器的内容,也是十分有用的。

(gdb) info registers
rax 0x2 2
rbx 0x7fffffffdbc8 140737488346056
rcx 0x403e18 4210200
(gdb) print $rax
$1 = 2
(gdb) stepi
0x0000000000401139 in bar 
1: x/i $pc
=> 0x401139 

3、复杂的函数调用

在带调试符号的 -g选项,重新编译示例程序后,你可以使用行号在mainbar调用上设置断点,然后再单步执行bar函数的语句:

gcc -g exmp.c -o exmp
gdb ./exmp
(gdb) b exmp.c:14
Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main  at exmp.c:14
14 bar(num);

接下来,用 step,来单步执行bar函数的语句:

(gdb) step
num  at exmp.c:4
4 return 2;

函数调用的参数需要在实际的函数调用之前进行处理,bar函数的参数是num函数,所以num会在bar被调用之前执行。但是,通过 GDB 调试,你怎么才能如愿以偿地进入bar函数呢?你可以使用finish命令,并再次使用step命令。

(gdb) finish
Run till exit from #0 num  at exmp.c:4
0x0000000000401161 in main  at exmp.c:14
14 bar(num);
Value returned is $1 = 2
(gdb) step
bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

4、tbreak 命令

tbreak命令会设置一个临时断点。如果你不想设置永久断点,那么这个命令是很有用的。举个例子??,你想进入一个复杂的函数调用,例如f(g(h), i(j), ...),在这种情况下,你需要一个很长的step/finish/step序列,才能到达f函数。如果你设置一个临时断点,然后再使用continue命令,这样就不需要以上的序列了。为了证明这一点,你需要像以前一样将断点设置在mainbar调用上。然后在bar上设置临时断点。当到达该临时断点后,临时断点会被自动删除。

(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main  at exmp.c:14
14 bar(num);
(gdb) tbreak bar
Temporary breakpoint 2 at 0x40113c: file exmp.c, line 9.

在调用 bar的时候遇到断点,并在bar上设置临时断点后,你只需要使用continue继续运行直到bar结束。

(gdb) continue
Continuing.
Temporary breakpoint 2, bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

5、disable 命令

类似地,你也可以在 bar上设置一个正常的断点,然后执行continue,然后在不再需要第二个断点时,使用disable命令禁用这个断点,这样也能达到与tbreak相同的效果。

(gdb) b exmp.c:14
Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main  at exmp.c:14
14 bar(num);
(gdb) b bar
Breakpoint 2 at 0x40113c: file exmp.c, line 9.
(gdb) c
Continuing.
Breakpoint 2, bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);
(gdb) disable 2

正如你所看到的,info breakpoints命令在Enb列下显示为n,这意味着这个断点已被禁用。但你也能在再次需要这个断点时,再启用它。

(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000401157 in main at exmp.c:14
breakpoint already hit 1 time
2 breakpoint keep n 0x000000000040113c in bar at exmp.c:9
breakpoint already hit 1 time
(gdb) enable 2
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040116a in main at exmp.c:19
breakpoint already hit 1 time
2 breakpoint keep y 0x0000000000401158 in bar at exmp.c:14
breakpoint already hit 1 time

6、advance 命令运行程序到指定的位置

另一个进入函数内部的方法是 advance命令。你可以简单地用advance bar,来代替tbreak bar ; continue。这一命令会将程序继续运行到指定的位置。

advance命令的一个很棒的地方在于:如果程序并没有到达你试图进入的位置,那么 GDB 将在当前函数运行完成后停止。因此,程序的执行会受到限制:

Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main  at exmp.c:14
14 bar(num);
(gdb) advance bar
bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

7、skip 命令

进入 bar函数的另一种方式是使用skip num命令:

(gdb) b exmp.c:14
Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) skip num
Function num will be skipped when stepping.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main  at exmp.c:14
14 bar(num);
(gdb) step
bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

请使用 info skip命令,来了解 GDB 跳过了哪些函数。num函数被标记为y,表示跳过了num函数:

(gdb) info skip
Num Enb Glob File RE Function
1 y n 

如果不再需要 skip,可以禁用(并稍后重新启用)或完全删除它。你可以添加另一个skip,并禁用第一个skip,然后全部删除。要禁用某个skip,必须指定其编号(例如,skip disable 1),如果没有指定,则会禁用所有的skip。启用或删除skip的工作原理相同:

(gdb) skip bar
(gdb) skip disable 1
(gdb) info skip
Num Enb Glob File RE Function
1 n n 

GDB 的 step 命令

使用 GDB 的 step命令是调试程序的一个有用工具。即使是复杂的函数,也有几种方法可以单步调试这些函数,所以下次你在排除代码问题的时候,可以尝试一下这些 GDB 技术。

via: https://opensource.com/article/22/12/gdb-step-command

作者:Alexandra选题:lkxed译者:chai001125校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出


上一篇:陆小凤传奇十部顺序小说(张智霖十部《陆小凤传奇》)
下一篇:五寸蛋糕多大参照物(蛋糕用量表改良版)
猜你感兴趣
丧尸片排行榜前十名电影(必看的十部R级丧尸电影)

丧尸片排行榜前十名电影(必看的十部R级丧尸电影)

1、《僵尸肖恩》 缺乏灵气的恐怖喜剧,除了结尾处不落俗套外,其余部分充分展示了影片的平庸。 想要融合恐怖和喜剧,自命不凡地展示了些英式的小幽默,并通过大量的血腥铺陈暴力元素;得到的却是弱智般的剧情展开,主角团一个接一个地故意送死,所有的争吵,亲情,背叛,动作戏码都宛如上世纪的产物,老套,陈旧,腐朽而无用。 2、《活死人黎明》 现在看20年前的丧尸电影,仍然会被某个场景吓到,这部片内容和现在末世..

资讯百科 2023-04-01
咕组词(毫发之间五十三谈)

咕组词(毫发之间五十三谈)

文/李郎杰 “锁事”,应为“琐事”。锁,可组词锁门、枷锁、锁定等;琐,可组词琐事、琐碎、烦琐等。 “克尽职守”,应为“恪尽职守”。克,可组词克制、克服、攻无不克等;恪,可组词恪守、恪遵、恪尽职守等。 “发挥到极至”,应为“发挥到极致”。至,可组词至少、直至、甚至等;致,可组词致敬、极致、景致等。 “奏热闹”,应为“凑热闹”。奏,可组词演奏、节奏、合奏等;凑,可组词凑合、紧凑、凑热闹、东拼西凑等..

资讯百科 2023-04-01
三苏的关系(《本草精荟》:“三苏”的功效与应用)

三苏的关系(《本草精荟》:“三苏”的功效与应用)

所谓“三苏”是指紫苏叶、苏梗与紫苏子三味药。来源相同,功效相近,可以对比学习。 紫苏叶为唇形科植物紫苏之叶,苏梗为其茎,苏子则是成熟果实。因其茎与叶都是紫红颜色,而“苏”字与舒畅气机的“舒”字同义,故此得名。全国各地均有产出,叶与梗夏秋采收,阴干入药。苏子待果实成熟后采收,可生用或微炒,用时捣碎。 一、三苏的功效。 紫苏叶味辛,性温。归肺、脾经。功效能发表散寒,行气宽中,解鱼蟹毒。常用于风寒感冒..

资讯百科 2023-04-01
抖音创始人哪里人(抖音创始人张一鸣优秀的人都有5大特质)

抖音创始人哪里人(抖音创始人张一鸣优秀的人都有5大特质)

张一鸣 ,字节跳动科技有限公司创始人、CEO,今日头条创始人,抖音创始人。2013年,他先后入选《福布斯》“中国30位30岁以下的创业者”和《财富》“中国40位40岁以下的商业精英”。 以下为他的一次分享: 为何毕业多年后 水平差不多的人会拉开差距 大家好!各位都非常年轻,我今天来的时候挺有压力。因为我毕业快11年了,看到你们,真是觉得“长江后浪推前浪”。 我去年参加了武汉的校招,感觉新一代年..

资讯百科 2023-04-01
规律的近义词(反义词大全)

规律的近义词(反义词大全)

宽阔――狭窄 平静――动荡 风平浪静—风号浪吼 涨—降 隐—现 人声鼎沸――鸦雀无声 加重――减轻 缓慢――快速 节省――浪费 分散――聚拢 茂盛—枯萎 美丽—丑陋 静寂—热闹 清楚—模糊 镇静—慌乱 伸开—缩拢 威武—沮丧 笑盈盈—哭啼啼 恍恍惚惚—清清楚楚 一模一样—截然不同 巨大—细小 神秘—平常 原始—现代 寒冷—炎热 珍贵—普通 深—浅 窄—宽 远――近 高――低 冷――热 横――..

资讯百科 2023-04-01
被子植物的主要特征(安徽选调生考试培训班)

被子植物的主要特征(安徽选调生考试培训班)

  1.建国以来,我国在科技方面取得了瞩目的成就,下面的表述错误的是:   A“天鲲号”是首艘由我国自主设计建造的亚洲最大自航绞吸挖泥船   B“嫦娥四号”探测器的发射,在人类历史上首次实现了航天器在月球背面软着陆   C“蛟龙号”是我国首艘载人潜水器支持母船   D“雪龙2号”是我国第一艘自主建造的极地科学考察破冰船   2.下列不同气候区和景观的对应错误的是:   A热带草原气候——纺锤树 ..

资讯百科 2023-04-01
缴组词(J部多音字汇编)

缴组词(J部多音字汇编)

J 部 1.奇 ① jī 奇数 ②qí 奇怪 奇异 2.缉 ① jī 通缉 缉拿 ②qī 缉鞋口 3.几 ① jī 茶几 几案 ②jǐ 几何 几个 4.稽 ① jī 滑稽 ②qǐ 稽首 5.亟 ① jí 亟待 ②qì 亟来请求 6.藉 ① jí 狼藉 ②jiè 慰藉 7.纪 ① jǐ 纪昀 ②jì 纪律 8.济 ① jǐ 济济一堂 ②jì 救济 共济 9.系 ① jì 系领带 ②xì 系马 维系..

资讯百科 2023-04-01
深沉的爱(经典永流传)

深沉的爱(经典永流传)

在央视《经典咏流传》节目中,台湾音乐人陈彼得的这首《我爱这土地》,让观者瞬间泪奔。这情感积淀岁月、发自肺腑,咏叹着对于祖国深沉的热爱。这首诗是诗人艾青1938年写给饱经磨难的祖国。 “他1938年11月份写的这首诗实际上代表着一个时代几代人的一个心声,祖国因为永远在他们心中,祖国永远在我们心中。” 石河子艾青诗歌馆馆长朱桦,每天都沉浸在诗人艾青无尽的艺术才华中。为了表达自己对土地最真挚、深沉..

资讯百科 2023-04-01
8开纸多大尺寸大小厘米(一般海报的尺寸都是多少)

8开纸多大尺寸大小厘米(一般海报的尺寸都是多少)

一、一般海报尺寸(普通海报尺寸)42cm×57cm(宽×高),大度四开57cm×84cm(宽×高) 二、宣传海报尺寸、商用海报尺寸50cm×70cm(宽×高)57cm×84cm(宽×高) 三、标准海报尺寸13cm×18cm、19cm×25cm、42cm×57cm、50cm×70cm、60cm×90cm、70cm×100cm、42cm×57cm、50cm×70cm 四、电影海报尺寸50cm×70..

资讯百科 2023-04-01
经典民间故事有哪些(中国这三则家喻户晓的【民间故事】)

经典民间故事有哪些(中国这三则家喻户晓的【民间故事】)

#头号有新人# 中国有着悠久的民间故事传统,这些故事既有趣又富有启发性。它们不仅记录了中国历史文化的发展,还为人们提供了生活智慧和人生哲理。 其中一个传统民间故事是“白蛇传”。 这个故事讲述了一只叫做白娘子的白蛇,她生活在一个美丽的山林中。有一天,她遇到了一位叫做许仙的男子,两人一见如故,立刻坠入爱河。 然而,许仙已经订婚了,他的未婚妻是一位名叫紫霞仙子的女子,她对许仙极为宠爱。当她发现许仙和..

资讯百科 2023-04-01
佛手瓜的功效与作用(经常吃“佛手瓜”会致癌生病)

佛手瓜的功效与作用(经常吃“佛手瓜”会致癌生病)

“这佛手瓜不能吃,致癌!”听了这话,苏阿姨脸都绿了。 苏阿姨的儿子第一次带着女朋友小莉回家来吃饭,她又兴奋又激动,当天准备了一大桌子菜招待小莉。 没想到的是,这顿饭还没开始吃就结束了。 小莉来到餐桌前看到一盘佛手瓜后当下脸就拉下来了,苦口婆心地跟苏阿姨说这个菜不能吃,会致癌,因为佛手瓜在炒制的过程中会产生丙烯酰胺。 说完小莉就拿着自己的包离开了饭桌,苏阿姨十分不悦,觉得小莉是在胡说八道。当天饭..

资讯百科 2023-04-01
八嘎是什么意思(日本人常说的“八嘎呀路”到底啥意思)

八嘎是什么意思(日本人常说的“八嘎呀路”到底啥意思)

在很多抗日战争题材的影视作品中,我们常常能听到“八嘎呀路”这个词,但这个词翻译成中文后,究竟是什么意思呢? 每当某位日本军官表达愤怒的时候,都会使用“八嘎呀路”,翻译“混蛋”,十分符合日本人当时的语境和情绪表达。 可事实上,“八嘎呀路”一词放在日语里面,是两个词。 “八嘎呀路”的中文翻译在日语中,“八嘎呀路”是“愚蠢的无可救药”的意思,并非“混账”的意思。 八嘎呀路的真实写法应该是“马鹿”、“..

资讯百科 2023-04-01
国家二级保护动物名单(国家二级保护动物)

国家二级保护动物名单(国家二级保护动物)

来源:南昌晚报 近日, 南昌市公安局新建分局 南矶派出所及时救助了一只 国家二级保护动物——灰雁, 受到群众好评。 2月25日15时, 南矶派出所民警在辖区内巡逻时, 于南矶乡矶山路段 发现一只受伤候鸟无法飞行, 随后,民警将伤鸟带回派出所 并?联系了?江西鄱阳湖南矶湿地 国家级自然保护区南山管理站。 经南山管理站工作人员检查后, 发现该候鸟没有外伤, 身体消瘦,叫声嘶哑。 经确定, ..

资讯百科 2023-04-01
牛牛有几个胃牛几个胃(牛长了4个胃都是吃火锅的心头爱)

牛牛有几个胃牛几个胃(牛长了4个胃都是吃火锅的心头爱)

当你去吃火锅的时候,会不会点草肚、牛百叶、金钱肚、牛肚蘑菇呢?你可能不知道的是,这些食物都是牛的胃,牛为了吃草长了四个胃,但都被人类开发成了美食。牛为什么要长四个胃,这四个胃都有什么用呢? 首先我们要知道,对于肉类而言,植物又难消化,营养又少,因此对牛羊这类食草动物来说,只靠一个胃来消化哪够啊,长了四个胃就可以尽可能榨干植物中的营养,植物停留在牛的消化系统的时间越长,人吸收的营养就越多。另外,..

资讯百科 2023-03-31
至纯天珠(什么样的天珠才配得上至纯这两字)

至纯天珠(什么样的天珠才配得上至纯这两字)

本文来源于 自在文玩 版权归原作者所有 最近有几位朋友问手里有没有至纯天珠,经过一番交流之后,我发现原来很多朋友都没有弄清楚到底什么是至纯天珠,就想拥有一颗。所以今天才想写下此文供大家参考。 首先说,在藏语里,是没有天珠这个词的,我们今天所称为的天珠,在藏语中被称为瑟。 天珠是上世纪80年代由台湾收藏家们取的名字,可以说这个名字取得非常的形象,因为的藏民们相信,这样精美的珠子,都是天上的神明..

资讯百科 2023-03-31
cdrom属于什么存储器(电子产品历史之CD-ROM)

cdrom属于什么存储器(电子产品历史之CD-ROM)

CD-ROM 的历史和遗产如果你问任何 90 年代和 2000 年代初的青少年,当你说 CD-ROM 时会想到什么,他们的眼睛会像你询问过的物体的闪亮底面一样发光。当你试图转移他们的注意力时,他们已经进入了另一个世界,眼睛被 AOL 免费试用 CD-ROM 的甜蜜怀旧之情所吸引,许多人都溜进了他们的磁盘驱动器——互联网的承诺如此接近,但又如此遥远离开。 尽管 AOL 创造了最令人难忘的 CD-..

资讯百科 2023-03-31
数据类型array是什么意思(什么是数组和结构体)

数据类型array是什么意思(什么是数组和结构体)

今天给大家介绍一下什么是数组,什么是结构体,关于数组我们会介绍数组的定义、它的使用方法,关于结构体我们会介绍结构体的使用、怎么去建立一个结构体等知识,之前也是有部分学员有问过这些问题的,那么都一块儿给大家讲讲吧。 我们先介绍一下数组,数组指的是将相同数据类型的标签的连续集合体用一个名称表示。可以将基本数据类型、结构体作为数组进行定义。数组分为一维数组、二维数组和三维数组。 上图的bLa..

资讯百科 2023-03-31
中国排名的四大银行是哪四个(中国银行业排行榜发布)

中国排名的四大银行是哪四个(中国银行业排行榜发布)

(财见2022年10月10日讯)近日,《清华金融评论》发布“2022中国银行业排行榜”。该排行榜参考巴塞尔协议Ⅲ和中国银行业监管机构的相关要求,基于中国各家商业银行2024年的核心一级资本净额,遴选出前200家银行,其中有6家大型商业银行、12家全国性股份制商业银行、94家城市商业银行、84家农村商业银行和4家民营银行。 榜单涉及总资产、净利润、成本收入比、净息差、资产利润率(ROA)、资本利..

资讯百科 2023-03-31
拳头账号忘了用户名咋办(玩LOL手游台服找回ROIT账号方法教程)

拳头账号忘了用户名咋办(玩LOL手游台服找回ROIT账号方法教程)

  英雄联盟手游台服已经上线了一段时间了,目前台服的国人玩家几乎占了一多半。不知道各位玩家们有没有找到一起开黑的好友呢?不过随着游戏的火爆,玩家们也会面临各种各样的问题。比如有的小伙伴可能会遇到忘记拳头账号用户名和密码的情况,相信这些小伙伴非常担心会因此丢失游戏进度以及充值道具。其实完全不用担心,目前市面上很多加速器都提供了拳头账号找回的快捷通道,下面小编就以UU加速器为例,为大家详细讲解一下..

资讯百科 2023-03-31
最新高尔夫规则(高尔夫:新高尔夫规则)

最新高尔夫规则(高尔夫:新高尔夫规则)

新高尔夫规则

资讯百科 2023-03-31
加载中...