首页 > 系统相关 >[Linux 高并发服务器]GDB调试

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

时间:2022-11-25 19:41:53浏览次数:40  
标签:objs %. list GDB Linux 服务器 断点 调试


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

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

  • ​​[Linux 高并发服务器]GDB调试​​
  • ​​GDB是什么​​
  • ​​预先准备​​
  • ​​基本命令​​
  • ​​例子​​
  • ​​进入和退出gdb​​
  • ​​获取帮助​​
  • ​​查看文件代码​​
  • ​​查看和设置显示行数​​
  • ​​打断点!!!​​
  • ​​运行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

对比生成的​​app​​​和​​app2​

[Linux 高并发服务器]GDB调试_测试工具


可以发现,​​app2​​比​​app​​更大一些,因为里面包含了源代码的信息(注意不是直接嵌入)如果生成编译的时候没有加​​-g​​参数,会报错:无符号列表,原因是没找到源代码相关信息

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

进入和退出gdb

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

获取帮助

使用​​gdb help​​进入帮助界面

使用​​help all​​可以查询所有指令

使用​​help 指令名​​可以查询对应的命令

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

查看文件代码

使用list查看文件代码(每次有行数限制)

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


如果一次list显示不完全可以再次使用list或者按回车(执行上一个指令),来显示接下来的部分查看特定函数 list/l 后面跟上函数名即可

[Linux 高并发服务器]GDB调试_文件名_06


查看其他文件

原本Makefile编译的调不了,应该是-g没有直接把​​.c​​​文件信息加进去,加了​​.o​​文件的信息

使用下面截图里的指令重新编译后可以查看其他文件

​l 文件名:函数名​​​​l 文件名:行号​

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

查看和设置显示行数

[Linux 高并发服务器]GDB调试_测试工具_08

打断点!!!

设置断点

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

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

运行GDB程序

运行GDB程序

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

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

c/continue

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

n/next

变量操作

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

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

s/step
finish (跳出函数体)

自动变量操作

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

其他操作

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

[Linux 高并发服务器]GDB调试_测试工具_10

[Linux 高并发服务器]GDB调试_文件名_11


标签:objs,%.,list,GDB,Linux,服务器,断点,调试
From: https://blog.51cto.com/u_15891800/5887531

相关文章

  • [Linux 高并发服务器]Makefile
    [Linux高并发服务器]Makefile[Linux高并发服务器]Makefile​​[Linux高并发服务器]Makefile​​​​什么是Makefile​​​​文件命名和规则​​​​Makefile工作原理​​......
  • [Linux 高并发服务器]制作静态库与动态库
    [Linux高并发服务器]制作静态库与动态库[Linux高并发服务器]制作静态库与动态库​​[Linux高并发服务器]制作静态库与动态库​​​​什么是库​​​​静态库的制作和使用......
  • linux ftp 操作命令
    1. Linux 终端连接FTP[oracle@Dave~]$ ftp10.85.7.97Connectedto10.85.7.97.220Serv-UFTPServerv6.4forWinSockready...500'AUTH':commandnotunderstood.......
  • Linux 查看磁盘空间
    linux查看磁盘空间可以使用df和du命令。dfdf以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。例如,我们使用df-h命令来查看......
  • 简述五种开源NAS存储服务器--转
    存储对于公司来说是必不可少的:数据必须被存储、检索、共享和保护。下面小编为大家介绍一下5款开源的NAS存储服务器一、云计算云计算正在蓬勃发展,比任何云存储系统都要快......
  • linux rabbitmq 安装方法
    1.安装erlang运行以下命令,安装erlang所需要的依赖包。yuminstall-ymakegccgcc-c++m4opensslopenssl-develncurses-develunixODBCunixODBC-develjavajav......
  • [ Linux ] 进程间通信之共享内存
    在上篇博文我们了解了通过管道完成进程间通信,我们了解匿名管道和命名管道,并且通过编码模拟实现使用了匿名管道和命名管道。我们知道要让进程间完成通信必须让这两个进程首先......
  • Linux 命令 su 和 sudo 的区别
    之前一直对su和sudo这两个命令犯迷糊,最近专门搜了这方面的资料,总算是把两者的关系以及用法搞清楚了,这篇文章来系统总结一下。1.准备工作因为本篇博客中涉及到用户切换,......
  • 寻找Linux单机负载瓶颈
    服务器性能上不去,是哪里出了问题?IO还是CPU?只有找到瓶颈点,才能对症下药; 如何寻找Linux单机负载瓶颈,遵循的原则是不要推测,我们要通过测量的数据说话;负载分两类: 1.CPU负载; ......
  • 8.8.8.8,Google推出免费DNS解析服务器
    Google今天又给了我们一个惊喜,并沉重的打击了OpenDNS:他们刚刚宣布向所有的互联网用户提供一组快速,安全并且完全免费的DNS解析服务器,地址分别是:8.8.8.88.8.4.4我想这组ip看......