【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
相关文章
|
28天前
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
251 6
|
1月前
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
78 14
|
2月前
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
284 6
Linux调试
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
63 1
|
2月前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
77 2
|
3月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
132 1
|
3月前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
113 1
|
3月前
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
59 1
|
NoSQL Linux C语言
《Linux C编程从入门到精通》——2.4 Linux中的调试环境gdb
从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图。如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境。
1799 0
|
NoSQL Linux C语言
《Linux C编程从入门到精通》》一2.4 Linux中的调试环境gdb
本节书摘来自异步社区《《Linux C编程从入门到精通》》一书中的第2章,第2.4节,作者 宋磊 , 程钢,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.4 Linux中的调试环境gdb Linux C编程从入门到精通 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图。
1982 0

热门文章

最新文章