GDB入门教程之恢复程序执行 | vim教程网
source link: https://vimjc.com/gdb-continue-debug.html?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
GDB入门教程之恢复程序执行
Vim教程网(https://vimjc.com)继续介绍 GDB 入门教程系列。
在学会了使用 GDB 启动调试、设置调试断点、查看变量值等基础知识后,工作中经常需要使用的 GDB 核心功能便是:调试程序 (即:灵活地控制和跟进程序的执行流程)。
在 GDB 下使用 wi
命令可启动可视化调试。为了便于演示,本文使用 GDB 的可视化调试模式行对下面的简单 demo 进行调试举例。
1 | #include<stdio.h> |
假设上述 demo 程序被 GDB 启动并暂停在第 14 行。
(1)
next
命令
可以使用 next
命令 (缩写形式 n
) 继续执行下一行语句。 next 6
表示一次性执行 6 次 next
命令,即从当前暂停的语句处往下执行 6 条语句。
(2)
step
命令
next
命令作用的对象是单条语句,如果需要调试进入到某个被调用函数的内部,可以使用 step
命令。
一条程序代码语句可能由多条机器指令完成,与 next
和 step
命令对应的机器指令级别的指令分别是 nexti
和 stepi
。
(3)
skip
命令
使用 step
命令进行单步调试时,如果想忽略一些函数,使得单步调试时不单步进入这些函数,可以使用 skip
命令。
例如,skip function swapper
命令表示在使用 step
进行单步调试时,将跳过单步调试 swapper 函数。
(4)
finish
命令
若想执行完并退出当前正在调试的某个函数,除了一直按 n
命令直到退出函数外,还可以使用 finish
(缩写形式 fin
) 命令 。
finish
命令表示继续运行程序,直到当前函数执行完成,并打印函数返回时的堆栈地址和返回值及参数值等信息。
(5)
return
命令
某些时候,为了控制程序的执行逻辑,可能会在调试函数时希望能提前返回,return
命令可实现这个目标。
return 666
表示忽略当前函数剩余未执行的语句,提前结束函数并将函数返回值设置为 666。
(6)
continue
命令
continue
命令 (缩写形式 c
) 或 fg
命令可用于控制被暂停程序继续执行,直到遇到下一个断点时被再次暂停。
(7)
until
命令
until
命令 (缩写形式 u
) 用于指示程序继续运行到某个指定位置。例如,demo 程序暂停在 main 函数内的第 14 行,until 5
命令表示程序将继续执行到第 19 行并暂停。
until
命令可以不带任何参数执行,表示将继续执行程序,直到到达当前循环体外的下一行源代码 (这句话其实比较难理解,官方的解释是:Execute until the program reaches a source line greater than the current)。
until
结合循环执行,个人感觉有点难以理解,后续会单独写篇文章详细介绍下这个命令。
扩展阅读:
《女程序员说》
原创不易,希望能给小女子的公众号加个关注~
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK