首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gdb在完成main之后跳过前面的行

gdb是GNU调试器的缩写,是一种功能强大的调试工具,常用于程序的调试和分析。在使用gdb调试程序时,可以通过设置断点、单步执行、查看变量值等功能来帮助定位和解决程序中的问题。

针对你提到的问题,"gdb在完成main之后跳过前面的行",这是一个关于gdb的调试技巧。在使用gdb调试程序时,有时我们希望跳过一些不需要关注的代码行,直接执行到我们感兴趣的代码位置,可以通过设置断点来实现。

具体操作步骤如下:

  1. 在终端中使用gdb命令启动gdb调试器,并指定要调试的可执行文件,例如:gdb <可执行文件名>
  2. 输入b main命令设置一个断点在main函数的入口处。
  3. 输入r命令运行程序,gdb会在main函数的入口处停下来。
  4. 输入c命令继续执行程序,直到main函数结束。
  5. 在main函数结束后,输入n命令可以跳过下一行代码,继续执行程序。
  6. 重复步骤5,直到达到你感兴趣的代码位置。

需要注意的是,这种跳过代码行的操作只是在调试过程中起到了加速的作用,并不会改变程序的实际执行逻辑。

关于gdb的更多详细信息和用法,你可以参考腾讯云提供的《GNU调试器GDB使用指南》(https://cloud.tencent.com/document/product/213/332)。

请注意,以上回答仅供参考,具体的调试操作还需要根据实际情况和需求进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GDB调试指南-单步调试

启动调试设置断点观察之后,没有我们想要的信息怎么办呢?这个时候,就需要单步执行或者跳过当前断点继续执行等等。而本文所说的单步调试并非仅仅指单步执行,而是指在你的控制之下,按要求执行语句。...num次,就达到继续执行n的效果了: $ gdb gdbStep #启动调试 (gdb)b 25 #将断点设置12 (gdb)run #运行程序 Breakpoint...,我们25处断住,执行n之后,运行到26,运行n 2之后,运行到28,但是有没有发现一个问题,为什么不会进入到add函数内部呢?...如果没有函数调用,s的作用与n的作用并无差别,仅仅是继续执行下一。它后面也可以跟数字,表明要执行的次数。 当然它还有一个选项,用来设置当遇到没有调试信息的函数,s命令是否跳过该函数,而执行后面的。...3 + 7 = 10 main () at gdbStep.c:29 29 count(c); (gdb) 可以看到,执行u 29之后,它在29停住了。

2.8K20

GDB调试入门,看这篇就够了

10设置临时断点 跳过多次设置断点 假如有某个地方,我们知道可能出错,但是前面30次都没有问题,虽然该处设置了断点,但是想跳过前面30次,可以使用下面的方式: ignore 其中,1是你要忽略的断点号...这样设置之后,会跳过前面30次。...b printf("%d + %d = %d\n",a,b,c); (gdb) 从上面的执行结果可以看到,我们25处断住,执行n之后,运行到26,运行n 2之后,运行到28...: count(c); (gdb) 可以看到,执行u 29之后,它在29停住了。...查看源码之前,首先要确保我们的程序能够关联到源码,一般来说,我们自己的机器上加上-g参数编译完之后,使用gdb都能查看到源码,但是如果出现下面的情况呢?

7.5K62

GDB调试还不会?看这篇就够了!

10设置临时断点 跳过多次设置断点 假如有某个地方,我们知道可能出错,但是前面30次都没有问题,虽然该处设置了断点,但是想跳过前面30次,可以使用下面的方式: ignore 1 30 其中,1是你要忽略的断点号...这样设置之后,会跳过前面30次。...,我们25处断住,执行n之后,运行到26,运行n 2之后,运行到28,但是有没有发现一个问题,为什么不会进入到add函数内部呢?...3 + 7 = 10 main () at gdbStep.c:29 29 count(c); (gdb) 可以看到,执行u 29之后,它在29停住了。...) 指定源码路径 查看源码之前,首先要确保我们的程序能够关联到源码,一般来说,我们自己的机器上加上-g参数编译完之后,使用gdb都能查看到源码,但是如果出现下面的情况呢?

4.6K21

Linux下gdb的安装及使用入门

(gdb) 如下图所示: ? gdb提供一个类似Shell的命令行环境,上面的(gdb)就是提示符,提示符后面输入gdb的相应命令就可以实现其对应的功能。...,而不必重新从代码里找应该在哪一设断点,这个过程用 disable 和 enable 来完成。   ...[8] 段错误   如果程序运行时出现段错误,用gdb可以很容易定位到究竟是哪一引发的段错误。gdb中运行,遇到段错误会自动停下来,这时可以用命令查看当前执行到哪一代码了。   ...函数第一语句前面等待命令 step(s) 执行下一语句,如果有函数则进入到函数中 break(b)  行号 某一设置断点 break  函数名 某个函数开头设置断点 break(b)… if…...set follow-fork-mode child/parent 设置gdbfork之后跟踪子进程/父进程 set  args  'command-line' 给执行的程序传命令行参数 s(stepin

6.4K10

Linux GDB jump 命令介绍

jump 命令除了跳过一些代码的执行外,还有一个妙用就是可以执行一些我们想要执行的代码,而这些代码正常的逻辑下可能并不会执行(当然可能也因此会产生一些意外的结果,这需要读者自行斟酌使用)。...(gdb) b main Breakpoint 1 at 0x400545: file main.cpp, line 4....[Inferior 1 (process 13349) exited normally] (gdb) redis-server 入口函数 main 处调用 initServer() ,我们使用 “b...,然后触发 2025 处的断点,接着输入 jmp 2027 : (gdb) b 2025 Breakpoint 5 at 0x42c8e7: file server.c, line 2025....的代码跳过了,2026 处的代码是获取当前进程 id: 2026 server.pid = getpid(); 由于这一跳过了,所以 server.pid 的值应该是一个无效的值,我们可以使用

6.7K10

【Linux】Linux调试器-gdb使用

还可以查main函数: l myprocess.c:main 想要查某一块代码可以加上行号,也可以加上对应的函数名就可以了。 发现gdb查代码只能默认查10 如果想要全部打出来怎么办?...15位置,而值17,因为17main函数的入口位置: 第20打断点,直接这样: b myprocess.c:20 因为每个断点都有自己的编号 想要连续打断点,怎么办呢?...3.4.4 disable使能 vs中断点位置右击可以禁用断点: 调试的时候就会跳过禁用的断点: 也就是把这个断点使能了。...gdb中想要实现逐过程就得用到命令: next/n 打了一个断点在17: 然后用来实现逐过程调试:发现并没有进入到AddToTarget函数里面: 3.6 step/s逐语句 在在vs里面的...F11就是逐语句,调试的时候,遇到函数就要进到这个函数里面,把这个函数里面的代码一运行完。

16110

GDB的那些奇淫技巧

这是一个 gdb 命令,其目的是告诉 gdb 目标应用调用fork之后接着调试子进程而不是父进程,因为 Linux 中fork系统调用成功会返回两次,一次父进程,一次子进程。...另外一个回答中说了,虽然不能断指定地址,但我们可以break main,告诉 gdb 把断点设置 main 函数。不过我们的子进程是没有符号的,所以break main并没有卵用。...detach-on-fork on是为了 fork 之后断开父进程,避免 gdb 退出时把父进程杀死,并不是这节的重点。 其中的时序非常重要。...比如下面的截图就是我曾经用 gdb + OpenOCD 来调试 ESP32固件的示例: Xtensa指令集调试 ESP32是比较少见的Xtensa指令集架构,上面的拓展都不支持,不过 gdb 本身支持...101 周围 10代码 list 1,10 显示 1 到 10 代码 list main 显示函数周围代码 list basic.c:main 显示另外一个源代码文件的函数周围代码 list

1.2K20

GDB调试指南-源码查看

) 直接输入l可从第一开始显示源码,继续输入l,可列出后面的源码。...) 指定源码路径 查看源码之前,首先要确保我们的程序能够关联到源码,一般来说,我们自己的机器上加上-g参数编译完之后,使用gdb都能查看到源码,但是如果出现下面的情况呢?...(gdb) 设置完成后,可以通过show substitute-path来查看设置结果。这样它也能在正确的路径查找源码啦。...编辑源码 为了避免已经启动了调试之后,需要编辑源码,又不想退出,可以直接在gdb模式下编辑源码,它默认使用的编辑器是/bin/ex,但是你的机器上可能没有这个编辑器,或者你想使用自己熟悉的编辑器,那么可以通过下面的方式进行设置...编辑完保存后,别忘了重新编译程序: (gdb)shell gcc -g -o main main.c test.c 这里要注意,为了gdb调试模式下执行shell命令,需要在命令之前加上shell,表明这是一条

2.1K40

linux下gdb调试方法与技巧整理「建议收藏」

(gdb) 到此gdb启动完成! 2、查看源码 list(简写 l): 查看源程序代码,默认显示10,按回车键继续看余下的。...until:当你厌倦了一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体; until+行号: 运行至某行,不仅仅用来跳出循环; finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit:简记为 q ,退出gdb 2、设置断点 break n (简写b n):第n处设置断点...list 行号:将显示当前文件以“行号”为中心的前后10代码,如:list 12 list 函数名:将显示“函数名”所在函数的源代码,如:list main list :不带参数,将接着上一次 list...8、常用gdb调试命令汇总 四、总结 总的来说Linux下开发程序gdb/cgdb是必须学会使用的,他的强大之处远不止于此,程序的调试中用它会提高的我们的调试效率,当然gdb的功能与使用技巧还不止于此

2.3K20

Linux调试器——gdb

调试思路上VS编译器和gdb是一样的,但是调试过程的差距就很大了。 我们都知道Linux的操作都是通过命令完成的,调试也是一样的,靠的就是命令调试。...gdb的基本操作 查看代码与断点 以下指令都是gdb环境下进行操作。 进入gdb模式发现连个代码都不知道在哪里,这怎么调试呢?...VS编译器中,我们按F9是可以进行打断点的,再按一次可以取消: Linux进行打断点是:b 你要断点的行数 现在13有一个断点,查看断点是info b: 断点也有自己的,就是前面...VS中F10是逐过程的运行,每次只跳过代码,比如调用函数的话是不会进入的,需要按F11逐语句才能进入调用的函数中查看: gdb的逐过程:n gdb的逐语句:s n没进入函数。...,比如你想跳转到的那一是空行,他会自动到空行下面的第一有效代码,如果超出了整体代码的行数,就是不合法的,无法跳转。

3.7K00

Linux下gdb用法简单介绍

一般来说,GDB主要帮助你完成下面四个方面的功能: 1、启动你的程序,可以按照你自定义的要求随心所欲的运行程序。 2、可以让调试程序在你所指定的位置的断点处停止。...从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过细节上,你会发现GDB这个调试工具的强大,大家可能习惯图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能...) break 16 ——————设置断点,源程序第16处。...当你用-g把调试信息假如之后,并成功编译目标代码以后,让我们来看看如果用GDB调试它。...Gdb中,输入命令时,可以不用打全命令,只用打命令的几个字符就可以了,当然,命令的几个字符要标志着一个唯一的命令,linux下,可以敲击两次TAB键来补齐命令的全称,如果有重复的,gdb会把其列出来

1.6K30

gdb调试】ubuntu环境使用gdb调试一棵四层二叉树的数据结构详解

break main break main与b main等价。 这段输出是 GDB 中设置断点的结果: (gdb): 这是 GDB 的提示符,表示它正在等待用户输入命令。...break main: 这是用户输入的命令,表示程序的 main 函数的起始处设置了一个断点。 Breakpoint 1 at 0x1398: 这一显示了断点的信息。...当前程序执行到了 buildTree() 函数的开头,即第 26 【未执行】 buildTree函数内部单步执行用到的还是n,除非需要进入buildTree函数里面的其他函数才用到s。 a....输出表明程序 main 函数的第 58 出现了段错误(Segmentation fault),导致程序终止。 d....at tree3_01.c:58: 表示 main 函数位于 tree3_01.c 文件中,并且是第 58 开始的。

9710

Go语言goroutine调度器初始化

程序入口 Linux命令行用 go build 编译hello.go,得到可执行程序hello,然后使用gdb调试,gdb中我们首先使用 info files 命令找到程序入口(Entry point...)地址为0x452270,然后用 b *0x452270 0x452270地址处下个断点,gdb告诉我们这个入口对应的源代码为 runtime/rt0_linux_amd64.s 文件的第8。...MOVQ0(SP), DI// argc LEAQ8(SP), SI // argv JMPruntime·rt0_go(SB) 指令把操作系统内核传递过来的参数argc...主线程与m0绑定 设置好g0栈之后,我们跳过CPU型号检查以及cgo初始化相关的代码,直接从164继续分析。...,因此当这个函数执行完成之后就有 m0.p = allp[0] allp[0].m = &m0 到此m0, g0, 和m需要的p完全关联在一起了。

1.2K30

GDB调试指南-断点设置

我们指定位置设置断点之后,程序运行到该位置将会“暂停”,这个时候我们就可以对程序进行更多的操作,比如查看变量内容,堆栈情况等等,以帮助我们调试程序。...这个时候我们可以借助gdb来设置条件断点,例如: break test.c:23 if b==0 当在b等于0时,程序将会在第23断住。...10设置临时断点 跳过多次设置断点 假如有某个地方,我们知道可能出错,但是前面30次都没有问题,虽然该处设置了断点,但是想跳过前面30次,可以使用下面的方式: ignore 1 30 其中,1是你要忽略的断点号...,可以通过前面的方式查找到,30是需要跳过的次数。...这样设置之后,会跳过前面30次。

1.9K20

一个例子引出的PLT与GOT姐妹花

这也就表示尽管 printf_banner() 函数调用了 printf函数,但是链接无法知道printf的地址的。那么 printf的地址在哪里呢?printf函数glibc动态链接库中。...2、链接重定向的分析 在这里我们的是动态链接,我么可以发现尽管链接时函数call发生了链接重定位,对call后面的内容进行了修改。...printf_stub: mov rax, [printf函数的储存地址] // 获取printf重定位之后的地址 jmp rax // 跳过去执行printf函数 .data ......命令查看.plt中jmp跳转地址内的指定的内容,命令如下:gdb test 和 b main gdb-peda$ x/x 0x804a00c 0x804a00c: 0x080482e6 gdb-peda...发现和common@plt中的jmp后面的地址发生了改变,即他们发生了重定向,而puts@plt的并没有改变,刚好main被调用了了,而printerbanner

79120

GDB调试-从入门实践到原理

在上篇文章中,我们分析了线上coredump产生的原因,其中用到了coredump分析工具gdb,这几天一直有读者问,能不能写一篇关于gdb调试方面的文章,今天借助此文,分享一些工作中的调试经验,希望能够帮到大家...在上面的例子中,栈上只有一帧,编号为0,属于main函数。...) q 在上述调试过程中: b 27 第27加上断点 b test.cc:32 第32加上断点(效果与b 32一致) info b 输出所有的断点信息 r 程序开始运行,并在第一个断点处暂停...默认情况下,多进程程序中,GDB只调试main进程,也就是说无论程序调用了多少次fork()函数创建了多少个子进程,GDB默认情况下,只调试父进程。...:子进程,其目的是告诉 gdb 目标应用调用fork之后接着调试子进程而不是父进程,因为Linux系统中fork()系统调用成功会返回两次,一次父进程,一次子进程 (gdb) show follow-fork-mode

2.8K30

整理:Visual Studio Code (vscode) 配置C、C++环境编写运行C、C++(主要Windows、简要Linux)

,但是意思不变,装完后点重新加载就行了 3、安装编译、调试环境 (若是电脑上原来装着codeblocks,Dev C++等可以跳过这步,【建议安装codeblocks使用其自带的编译器】 直接跳到 【...: 使用下面代码替换该文件:(只是vsc自己产生的json文件加了一些) launch.json中有很多属性可以设置, 通过智能提示查看有那些属性可以设置, 如果要查看属性的具体含义, 可以把鼠标悬停在属性上面...下面这个是最后用getchar()的旧图,没删供参考 【更新:似乎下面的步骤配置c_cpp_properties.json不需要了,因为我按照上面的步骤来似乎没有头文件有下划线和原来有的灯泡图标什么的...,到这里基本配置完成】 配置c_cpp_properties.json 保存一下,然后切换至a.cpp,再次按F5启动调试。...如果前面的配置都对的话,这个时候会进行编译,然后跳出黑框输出Hello World,之后窗口又迅速消失。 可能大多数人已经习惯了VS/VC的便利,其实我们这只要在末尾加上一个cin输入即可。

4.6K10

【Linux】常用工具(下)

其实上面的现象中,程序执行 printf 后,printf 打印的内容被存放到缓冲区中, C/C++ 中,会针对标准输出,给我们提供默认的缓冲区,而在缓冲区没有被刷新之前,我们的内容就不会被输出。...,我们的倒计时虽然同一了,但是输出的格式还是有问题,因为默认 %d 是按照一个字符的形式打印的,我们是要按照两个字符打印,所以我们仅需将第9修改即可,如下: 9 printf...查看指令 gdb 中,list(简写 l )可以查看源代码;其中,l + number 可以查看从第 number 代码;另外 gdb 会记录最近的历史命令,直接回车就是上一个命令;所以我们直接回车...断点 打断点(Breakpoint)的指令是:b + number 或者 b + function,其中 number 为行号,function 为函数名,例如我们以上面的代码为例,某一打断点: 此时查看我们的打的断点指令是...:info b,如下: 删除断点的指令是d + 序号,其中序号是查看断点中前面的那个 Num,例如我们先多打几个断点: 如上,每个断点都有对应的序号,假设我们需要删除某一个断点: 3.

19410

掌握GDB调试工具,轻松排除bug

如果目标执行文件要求出入参数(如 argv[] 接收参数),则可以通过三种方式指定参数: 启动 gdb 时,gdb --args text_file.exe 进入gdb 之后,运行 set args...三、GDB调试程序用法 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。...从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能...具体来说,比如我getbuf()和main()上设置了断点,当启动程序时会停在main()函数的断点上。...,因此需要用gdb-multiarch来进行调试 miDebuggerServerAddress:对端地址,qemu会默认使用1234这个端口 配置完成之后,可以直接启动GDB, 连接上linux kernel

67800

使用Eclipse构建树莓派远程调试环境

本文内容和两篇文章具有连续性,请根据需要阅读。 Ubuntu主机端使用gdb-multiarch实现远程调试之后,接下来使用说明Eclipse中实现远程调试的方法。...构建远程调试配置信息 通过菜单选择[Run]-[Debug Configurations...]启动调试配置信息设定画面之后,选择[C/C++ RemoteApplication]项目之后,鼠标右键选择...首先在[Main]设定页中选择Projectde和Application,结果如下图: ? 接下来进入[Debugger]属性页并选择[Main]设定项目。...选择[Gdb debugger]为gdb-multiarch。 ? 选择[Debugger]属性页中的[Connection]设定项目。...如果见到下面的画面,就表示远程调试已经开始了。 ? 直接按下F8继续执行时候,树莓派的表示如下: ? 至此使用Eclipse进行树莓派远程调试环境安装完成

95920
领券