【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
相关文章
|
2月前
|
Ubuntu Linux 网络安全
在Linux上安装软件有多种方法
在Linux上安装软件有多种方法
113 64
|
1月前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
47 2
|
2月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
58 1
|
2月前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
78 1
|
2月前
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
45 1
|
22天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
131 6
|
23天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
64 3
|
23天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
59 2
|
1月前
|
缓存 监控 Linux
|
18天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
54 3

热门文章

最新文章