【linux】“gdb“调试方法与技巧

简介: 【linux】“gdb“调试方法与技巧

一、什么是gdb?

gdb是一款开源的、功能强大的调试器,它可以用于调试多种编程语言,如C、C++、汇编语言等。gdb可以帮助开发者在程序运行时进行调试,并找到程序中的错误。gdb提供了许多常用的调试功能,如设置断点、单步执行、查看变量值等。


程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

二、gdb的使用

我们使用c源文件进行演示。

进入gdb调试

在我们生成debug版本下的可执行程序之后可以使用gdb 可执行程序来进入gdb:

到这里我们就可以开始gdb调试了。

list/l 查看源码

l/list+行号

我们可以输入l/list+行号进行查看源码,默认显示前十行:


因为gdb可以记录我们上一条指令,所以我们再次按下回车会接着执行上一次的指令,可以查看剩余的代码:

list/l+函数名

l+list+函数名可以直接查看函数所在的区间代码:

他默认会将我们要查找的函数放在居中位置。

run/r运行

run/r开始运行程序直到遇到结束或者遇到断点等待下一个命令。

break(b)设置断点

break(b)+行号,可以在某一行加上断点。

break(b)+函数名,在某个函数开头设置断点。

info break查看断点信息

使用info break来查看当前设置的断点信息。

finish

finish执行到当前函数返回,然后停下来等待命令。

n/next单条执行

开始执行之后可以使用n/next进行单行执行,就是vs中的F10

s/step进入函数调用

开始执行之后可以使用s/step进行逐语句执行,就是vs中的F11.

p 变量

可以使用p +变量来打印变量的值。

set var修改变量的值

调试过程中可以通过set var来修改变量的值。

continue/c

continue/c:从当前位置来纳许而非但步骤执行程序。

disable breakpionts

disable breakpionts+断点号:可以禁用这个断点

可以看到禁用之后的断点 Enb属性从y变成了n.

enable breakpoints

enable breakpoints+ 断点号:可以启用这个断点。


delete breakpoints

delete breakpoints:删除所有断点

delete breakpoints+n:删除序号为n的断点。

display

display + 变量名:跟踪查看一个变量,每次停下来都显示它的值。

undisplay

undisplay + n取消对序号为n的变量的跟踪,如果不加n则会取消对所有先前设置的那些变量的跟踪。

until

until+n跳转至n行执行。

breaktrace/bt

breaktrace/bt:查看各级函数调用及参数。

info (i)locals

查看当前栈帧局部变量的值。


quit/q

quit/q:退出gdb。

这里由于我们并没有完成全部调试,所以他会询问我们是否要退出gdb,我们直接输入y即可退出gdb。

gbd总结

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

list/l 函数名:列出某个函数的源代码。

r或run:运行程序。

n 或 next:单条执行。

s或step:进入函数调用

break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

info break :查看断点信息。

finish:执行到当前函数返回,然后挺下来等待命令

print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值

continue(或c):从当前位置开始连续而非单步执行程序

run(或r):从开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

until X行号:跳至X行

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

quit:退出gdb


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
20天前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
|
25天前
|
Linux C# iOS开发
如何用 WinDbg 调试Linux上的 .NET程序
【7月更文挑战第13天】 1. `dotnet-dump`: Collects process dumps with `dotnet-dump collect -p <process_id>`. 2. `lldb`: Debugs Mono runtime apps on macOS/Linux. 3. **Visual Studio Code**: Remotely debugs .NET via the C# extension. 4. **JetBrains Rider**: Supports remote debugging of .NET on Linux.
|
3天前
|
存储 安全 Linux
说到Linux安全,SSH限制IP登录绕不开这3种方法!
说到Linux安全,SSH限制IP登录绕不开这3种方法!
|
13天前
|
关系型数据库 Linux 应用服务中间件
linux服务器下LNMP安装与配置方法
通过遵循上述步骤,你已经在Linux服务器上成功配置了LNMP环境。这只是初步设置,根据你的实际需求,可能需要进一步的调整与优化。记得经常检查每个组件的默认配置文件,并根据需要进行调整以优化性能和安全性。
11 0
|
2月前
|
Linux
linux不同场景下修改文件名的五种方法
linux不同场景下修改文件名的五种方法
30 1
|
1月前
|
运维 Linux 调度
Linux定时器的配置与管理方法
Linux定时器的配置与管理方法
|
2月前
|
Java 编译器 Linux
程序技术好文:详解Linux安装GCC方法
程序技术好文:详解Linux安装GCC方法
51 0
|
11月前
|
缓存 NoSQL 安全
Linux设备驱动程序(四)——调试技术3
Linux设备驱动程序(四)——调试技术3
124 0
|
11月前
|
NoSQL 安全 Linux
Linux设备驱动程序(四)——调试技术1
Linux设备驱动程序(四)——调试技术1
133 0
|
9月前
|
Linux 测试技术 API
Linux内核调试技术(一)kprobe使用与实现
Linux内核调试技术(一)kprobe使用与实现

热门文章

最新文章