IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> [Linux 高并发服务器]GDB调试 -> 正文阅读

[系统运维][Linux 高并发服务器]GDB调试

[Linux 高并发服务器]GDB调试

GDB是什么

GDB是由GNU软件系统社区提供的调试工具,同GCC配套组成了一套完整的开发环境

GDB可以帮助完成下面四个功能:

  • 启动程序,可以按照自定义要求运行程序
  • 可以让调试的程序在指定断点位置停住
  • 当程序停住时可以检查程序中发生的事情
  • 可以改变程序,将一个bug产生的影响修正从而测试其他bug

预先准备

如果为了调试而编译我们通常会

  • 关掉优化选项(-o)
  • 打开调试选项(-g)
  • -Wall尽量全开
gcc -g -Wall program.c -o program

-g选项的作用是在可执行文件中加入源代码信息,但是不把整个源文件嵌入进去,所以调试时要保证gdb能找到源文件

基本命令

启动
gdb 可执行程序
退出
quit
给程序设置参数
set args 10 20
获取设置参数
show args
使用帮助
help
查看当前文件代码
list/l
list/l 行号
list/l 函数名
查看非当前文件代码
list/l 文件名:行号
list/l 文件名:函数
设置显示的行数
show list/listsize
set list/listsize 行数

例子

使用事先写好的main.c,add.c,sub.c和makefile文件来做样例
不带-g的Makefile

src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
        $(CC) $(objs) -o $(target)
%.o:%.c
        $(CC) -c $< -o $@ 

clean:
        rm $(objs) -f

带-g的Makefile

src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app2
$(target):$(objs)
        $(CC) $(objs) -o $(target) -g
%.o:%.c
        $(CC) -c $< -o $@ -g

clean:
        rm $(objs) -f

对比生成的appapp2
在这里插入图片描述
可以发现,app2app更大一些,因为里面包含了源代码的信息(注意不是直接嵌入)

如果生成编译的时候没有加-g参数,会报错:无符号列表,原因是没找到源代码相关信息
在这里插入图片描述

进入和退出gdb

在这里插入图片描述

获取帮助

使用gdb help进入帮助界面
使用help all可以查询所有指令
使用help 指令名可以查询对应的命令
在这里插入图片描述

查看文件代码

使用list查看文件代码(每次有行数限制)
在这里插入图片描述
如果一次list显示不完全可以再次使用list或者按回车(执行上一个指令),来显示接下来的部分

查看特定函数 list/l 后面跟上函数名即可
在这里插入图片描述
查看其他文件
原本Makefile编译的调不了,应该是-g没有直接把.c文件信息加进去,加了.o文件的信息
使用下面截图里的指令重新编译后可以查看其他文件
l 文件名:函数名
l 文件名:行号
在这里插入图片描述

查看和设置显示行数

在这里插入图片描述

打断点!!!

设置断点

b/break 行号
b/break 函数
b/break 文件名:行号
b/break 文件名:函数

查看断点

i/info b/break

删除断点

d/del/delete 断点编号

设置断点无效

dis/disable 断点编号

设置断点生效

ena/enable 断点编号

设置条件断点(一般用在循环的位置)

b/break 10 if i==5

在这里插入图片描述

运行GDB程序

运行GDB程序

start 程序停在第一行
run 遇到断点才停

继续运行,到下一个断点听

c/continue

向下执行一行代码(不会进入函数体

n/next

变量操作

p/print 变量名(打印变量值)
ptype 变量名 (打印变量类型)

向下单步调试(遇到函数进入函数体

s/step
finish (跳出函数体)

自动变量操作

display num(自动打印指定变量的值)
i/info display
undisplay 编号

其他操作

set var 变量名=变量值
until (跳出循环,循环内部不能有断点,当前循环代码要执行完)

在这里插入图片描述在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:37:31  更:2021-10-06 12:39:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:25:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码