gdb调试指令,以及ubuntu如何新建窗口

本文介绍了在VPP环境下如何使用GDB进行调试,包括设置指定文件和函数的断点,删除断点,以及利用Ubuntu的Screen工具管理多窗口进行交互式调试。在调试过程中,可以通过Screen新建、切换和关闭窗口,以便同时进行用户交互和程序调试。此外,还详细列举了GDB的关键调试指令。
摘要由CSDN通过智能技术生成

这几天需要在vpp下面写一个新函数接口,频繁使用gdb,因此做一下记录,主要是指令和操作

gdb指令参考:
链接: gdb使用
链接: gdb 常用命令



一、vpp进入调试

ubuntu系统:

在项目目录下:

$ make build
$ make debug

在这里插入图片描述

到(debug)命令行,输入r表示调试:

(debug) r

在这里插入图片描述
这里就是等待用户输入,这时候新建一个窗口,输入nat等指令进行交互。

其他进入调试的方法

为了生成一个debug版本(可调式)的可执行程序,可以在makefile中编译的时候带上参数-g
参考:【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)

二、打断点

以下断点关键字break均可以简写为b

1、指定文件名的加断点

由于项目中很多文件,建议使用指定文件名的加断点方法:

break [filename]:[line]

比如:

break /git/vpp/src/plugins/nat/det44/det44_in2out.c:1510

这里建议文件名使用绝对路径。

2、对函数名加断点

break [function]

比如:

break main

3、删除所有断点

delete

4、查看所有断点信息

info breakpoints

5、删除指定断点

delete [breakpoint number]

[breakpoint number] 可以通过 info breakpoints 指令查看

也可以delete一键全部删除

6、使断点无效

使所有断点无效:

disable b

使某个断点无效:

disable b [breakpoint number]

7、使断点生效

使所有断点生效:

enable b

使某个断点无效:

enable b [breakpoint number]

三、ubuntu新建窗口

由于调试需要和用户交互,因此新开一个窗口,使用screen指令
在这里插入图片描述

1、新建窗口

screen

Ctrl-a c  //先同时按Ctrl和a,然后按c

screen -S myWindow // 新建一个指定名字为myWindow 的窗口

2、切换窗口

Ctrl-a n:切换到下一个窗口。
Ctrl-a p:切换到上一个窗口。

3、关闭窗口

Ctrl-a k:关闭当前窗口。
然后根据提示按下 y 。

4、分离窗口

Ctrl-a d:分离当前会话。

分离会话时,会话并不会终止。分离会话只是将终端与会话断开连接,但会话仍然在后台运行。可以关闭终端窗口,稍后重新连接并恢复会话。

如果想要终止一个分离的screen会话,可以使用

screen -S [session #] -X quit

这将发送一个quit命令到指定的会话,从而终止该会话。

比如:

screen -S 69551.pts-0.jxtvpp -X quit

5、查看存在的screen会话

screen -ls

在这里插入图片描述

21605.pts-0.jxtvpp 就是这个新窗口的ID

6、根据ID进入窗口

screen -r 21605.pts-0.jxtvpp

四、开始调试

在新开的窗口中进入vpp指令界面,输入

sudo vppctl

然后输入指令,比如查看nat路由,当涉及到打断点的函数时,切换到调试窗口,会发现程序重新回到gdb模式:

在这里插入图片描述

gdb调试指令

设置了断点之后,可以运行程序,当程序运行到断点处时,它将暂停执行,并将控制权返回给GDB(如上图最后一行,会出现GDB的命令提示符“(gdb)”)。
此时可以使用GDB的调试命令来检查程序状态、单步执行代码或继续运行程序。

1、运行程序

下面的指令都是 GDB的调试命令 (gdb) 后面输入的

执行程序(RUN):

r  

当没有打断点时,会一直执行直到程序结束。

2、显示代码

指定行号查看(list)代码,可以在调试断点处查看断点附近代码(默认10行):

l 

也可以指定从某行(begin_line)到某行(end_line):

l begin_line:end_line

也可以指定某个文件的某个函数:

l file_name:func_name

3、继续运行

继续运行程序(continue),直到遇到下一个断点或程序结束。

c

4、逐过程执行

执行下一行代码(单步执行),但不进入函数调用

n

5、逐语句

执行下一行代码(单步执行),并进入函数调用

s

6、打印变量值

打印表达式或变量的值。

p variable

7、跟踪查看变量值

每次程序暂停(如到达断点,每次单步执行),都会自动打印跟踪的变量或表达式的值,就不用每次手动执行打印p命令

display variable

8、查看所有跟踪的变量:

info dispaly

可以看到所有跟踪变量的编号、状态(是否每次暂停都被打印)、以及变量名

9、删除要跟踪的变量

undisplay variable
undisplay variable_num    

参数为变量名或变量编号

10、查看调用栈

打印当前线程的调用栈,可以看到底层函数调用的过程

bt

从上往下,可以看到当前位置到程序的入口,可以判断程序是在哪里停住了。

11、退出调试

退出gdb调试(quit)

q

调试怎么看

在这里插入图片描述

1517            lo = true;

表示执行到了这一行,但这一行还未执行,这可以通过打印 lo 的值看出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值