【Linux调试器】gdb背景和调试方法(入门看这一篇就够了)

发布时间:2024年01月16日

目录

一、背景知识

二、gdb 操作

1、gdb+可执行程序

2、quit 指令

?3、l / list 指令?

1)l / list + (行号)

2)list/l 函数名

4、r / run 指令

5、break / b?指令

1)break / b + 行号

2)break? / b +函数名

3)info break / b

6、d + 断点编号

?7、n /?next 指令

8、print / p 指令

9、s / step 指令

10、bt 指令

11、finish 指令

12、display+变量名

?13、undisplay + 编号

14、until + 行号

15、continue / c 指令

16、disable / enable+断点编号

17、set?var 指令


一、背景知识

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

🟢Linux gcc/g++出来的二进制程序,默认是release模式,所以无法直接被调试!

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

🟢readelf - S 读取可执行程序的结构。

?

二、gdb 操作

🕐?准备工作:为了操作简便,新创建一个 Makafile 文件。

涉及知识:make/Makefile

1、gdb+可执行程序

? ?功能💯:启动 gdb

2、quit 指令

功能💯:退出gdb

3、l / list 指令?

gdb 会记住最近的一条命令,如果命令无变化,可以直接回车。

1)l / list + (行号)

功能💯:显示binFile源代码,接着上次的位置往下列,每次列10行。不加行号,默认从第10行开始显示代码。

2)list/l 函数名

功能💯:列出某个函数的源代码?

4、r / run 指令

功能💯:开始调试,如果没有设置断点,直接运行结束。

5、break / b?指令

1)break / b + 行号

功能💯:在某一行设置断点,但不会显示该行内容。

2)break? / b +函数名

功能 💯:在某个函数开头设置断点

3)info break / b

功能💯 :查看断点信息。

6、d + 断点编号

功能💯:删除断点。设置断点时,会给予一个断点编号。

7、n /?next 指令

功能💯:单条执行,逐过程,相当于vs里面的F10。

8、print / p 指令

功能 💯:打印表达式的值,通过表达式可以修改变量的值或者调用函数。

9、s / step 指令

功能💯:进入函数调用,逐语句,相当于vs里的F11。

10、bt 指令

功能💯:查看当前调用堆栈

11、finish 指令

功能💯:执行到当前函数返回,然后停下来等待命令

12、display+变量名

功能💯:跟踪查看一个变量,每次停下来都显示它的值。可以显示多个变量的值。

?13、undisplay + 编号

功能💯:取消 display 长显示。

14、until + 行号

功能💯:跳至指定行。

当我们观察一个循环时,不想一行一行的看,希望直接跳转到循环结果,而又不跳出这个函数。

15、continue / c 指令

功能💯:从当前位置开始连续而非单步执行程序?,运行到下一个断点处。

16、disable / enable+断点编号?

功能💯:使能(打开和关闭)断点

17、set?var 指令

功能💯:修改变量的值?

三、总结

学完这些指令,是不是感觉脑袋要爆炸了? 其实这些不是立即要全部掌握,可以在日常使用中不断加深印象,慢慢学会使用就可以了。但是一定要及时复习啊!!!

文章来源:https://blog.csdn.net/Dawn_Lillian/article/details/135440921
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。