Linux的学习之路:8、Linux调试器-gdb使用

简介: Linux的学习之路:8、Linux调试器-gdb使用

一、背景

Linux调试器gdb的背景主要涉及到Linux程序发布方式和调试需求。

在Linux中,程序的发布方式主要有两种:debug(调试)模式和release(发行)模式。由gcc/g++生成的二进制程序,默认是release模式,这种模式下的程序不会添加任何调试信息,因此是不可调试的。而gdb正是为了满足Linux程序的调试需求而存在的工具。

gdb是Linux中的调试器,由于Linux是命令行式的操作,所以进行调试也是以命令行的方式进行。尽管在某些场景下,命令行方式的调试可能没有IDE下的调试来得简洁利索,但在没有设计专门的IDE的场景下,gdb就发挥了其重要的作用。

总的来说,gdb在Linux系统中扮演着至关重要的角色,为开发者提供了强大的调试功能,帮助他们有效地查找和修复程序中的错误。

二、使用

1、产生debug文件

这个只需要在gcc编译文件的时候加上-g就可以了如下方代码

[ly1@VM-24-9-centos test]$ gcc -g -o test.debug test.c

[ly1@VM-24-9-centos test]$ ll

total 40

-rwxrwxr-x 1 ly1 ly1 8360 Apr 12 20:49 hello

-rw-rw-r-- 1 ly1 ly1  643 Apr 12 20:45 LICENSE

-rw-rw-r-- 1 ly1 ly1  841 Apr 12 20:45 README.en.md

-rw-rw-r-- 1 ly1 ly1  930 Apr 12 20:45 README.md

-rw-rw-r-- 1 ly1 ly1    0 Apr 12 21:23 test2

-rw-rw-r-- 1 ly1 ly1    0 Apr 12 21:20 test3.c

-rw-rw-r-- 1 ly1 ly1   70 Apr 12 20:48 test.c

-rwxrwxr-x 1 ly1 ly1 9360 Apr 12 21:51 test.debug

[ly1@VM-24-9-centos test]$  

2、进入gdb

gdb +需要调试的程序,如下方代码,就是gdb test.debug就是可以进入gdb如下方。

[ly1@VM-24-9-centos test]$ gdb test.debug

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

Reading symbols from /home/ly1/test/test.debug...done.

(gdb)  

3、使用指令

下面就不一一演示了,我把能用到的都罗列出来了,如下方代码块里面所示

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

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

r或run:运行程序。

n 或 next:单条执行。

s或step:进入函数调用

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

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

info break :查看断点信息。

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

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

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
目录
相关文章
|
11天前
|
存储 Linux
Linux的学习之路:16、文件(3)
Linux的学习之路:16、文件(3)
23 0
|
11天前
|
Linux C语言 C++
Linux的学习之路:14、文件(1)
Linux的学习之路:14、文件(1)
20 0
|
3天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
8 0
|
4天前
|
编解码 Linux 数据安全/隐私保护
【Linux学习】​​学习Linux的准备工作和Linux的基本指令
【Linux学习】​​学习Linux的准备工作和Linux的基本指令
|
4天前
|
Linux Shell 虚拟化
【Linux学习】Linux 的虚拟化和容器化技术
【Linux学习】Linux 的虚拟化和容器化技术
|
11天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
24 1
|
11天前
|
Unix Linux 索引
Linux的学习之路:15、文件(2)
Linux的学习之路:15、文件(2)
19 0
Linux的学习之路:15、文件(2)
|
11天前
|
人工智能 Linux Shell
Linux的学习之路:13、进程替代
Linux的学习之路:13、进程替代
25 0
|
11天前
|
存储 Linux 调度
Linux的学习之路:12、地址空间(续)与进程的创建、终止和等待
Linux的学习之路:12、地址空间(续)与进程的创建、终止和等待
15 0
|
11天前
|
Linux C++
Linux的学习之路:11、地址空间
Linux的学习之路:11、地址空间
16 0