[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 $@ -gclean: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 (跳出循环,循环内部不能有断点,当前循环代码要执行完)

[Linux 高并发服务器]GDB调试相关推荐

  1. Linux 高并发服务器开发

    该文章是通过观看牛客网的视频整理所得,以及在实践过程中遇到的问题及解决方案的整理总结. Linux 高并发服务器开发 linux 系统编程 linux 环境的搭建 环境搭建需要的软件 虚拟机中安装 u ...

  2. Linux高并发服务器开发---笔记2(多进程)

    0630 第4章 项目制作与技能提升 4.0 视频课链接 4.1 项目介绍与环境搭建 4.2 Linux系统编程1.4.3 Linux系统编程2 4.4 多进程 1-9 10.进程间通信☆☆☆ 进程间 ...

  3. Linux高并发服务器开发---笔记1(环境搭建、系统编程、多进程)

    0613 第4章 项目制作与技能提升 4.0 视频课链接 4.1 项目介绍与环境搭建 4.1.1 项目介绍 4.1.2 开发环境搭建 ①安装Linux系统.XSHELL.XFTP.Visual Stu ...

  4. Linux 高并发服务器实战 - 2 Linux多进程开发

    Linux 高并发服务器实战 - 2 Linux多进程开发 进程概述 概念1: 概念2: 微观而言,单CPU任意时刻只能运行一个程序 并发:两个队列交替使用一台咖啡机 并行:两个队列同时使用两台咖啡机 ...

  5. Linux 高并发服务器实战 - 1 Linux系统编程入门

    Linux 高并发服务器实战-1Linux系统编程入门 在本机和服务器端设置公共密钥(配置免密登录) 在本机cmd里输入 ssh-keygen -t rsa,生成本机的公密钥 在服务器端里也配置 ss ...

  6. Linux高并发服务器开发---笔记4(网络编程)

    0705 第4章 项目制作与技能提升 4.0 视频课链接 4.1 项目介绍与环境搭建 4.2 Linux系统编程1.4.3 Linux系统编程2 4.4 多进程 1-9 10.进程间通信☆☆☆ 4.5 ...

  7. [Linux 高并发服务器]网络基础

    [Linux 高并发服务器]网络基础 文章概述 该博客为牛客网C++项目课:Linux高并发服务器 个人笔记 作者信息 NEFU 2020级 zsl ID:fishingrod/鱼竿钓鱼干 Email ...

  8. Linux高并发服务器解决方案

    Linux高并发服务器案例演示 在网络通信中,我们常常的服务器经常会受到成千上万的请求提示,而电脑会根据请求建立相对应的socket链接,但是接触过Linux网络编程的人都知道,Linux链接和客户端 ...

  9. Linux高并发服务器开发—项目实战

    1.阻塞/非阻塞.同步/异步(网络IO) 典型的一次IO的两个阶段是什么?数据就绪 和 数据读写 数据就绪:根据系统IO操作的就绪状态 阻塞--非阻塞 数据读写:根据应用程序和内核的交互方式 同步-- ...

最新文章

  1. JavaScript 的使用简单总结
  2. 微软这次发布会巨硬:安卓折叠手机、双屏电脑,还有无线耳机和超薄平板
  3. Linux 中vim编辑器学习笔记
  4. 全连接网络和卷积网络实践
  5. Apache 工作模式配置优化
  6. 公有云 私有云 混合云_您需要了解的有关混合云的知识
  7. iOS开发之runtime(16):设置/获取section数据详解
  8. goroutine 相关知识8
  9. vector 清空 Linux,STL容器vector基础用法小结
  10. vs2012 怎样解决 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包的问题
  11. MY CSDB BLOG 第一篇
  12. 微信UnionID作用
  13. 阿里云centos部署jsonserver
  14. python输出奇数个数_Python实践|输出0-7组成八位奇数总数
  15. [单刷APUE系列]第十二章——线程控制
  16. linux交互式进程初始化失败怎么办,电脑进入安全方式仍然显示交互式登录进程初始化失败...
  17. DC学习(时序分析和命令)
  18. UVa 1471 Defense Lines - 线段树 - 离散化
  19. weico.cc微博链接
  20. 产业分析:快手私域经营

热门文章

  1. 《16.shell原理和问答机制引入》
  2. 项目总结23:POI生成Excel文件并浏览器导出
  3. matlab 风电厂模板解释,基于MATLAB的风电场建模仿真研究牛步柯(原稿)
  4. 欢(nan)乐(shou)纪中培训(Day 0~Day 1)
  5. 国产安卓手机应用市场侵犯个人隐私的APP广泛存在,或促使更多高端用户选购iPhone...
  6. 基于ssm Shiro微信二次开发源码分享
  7. 别不相信,查违章的多是老司机
  8. Linux操作系统介绍及用户管理
  9. 【大数据和人工智能的日本跨境电商 BABALIBO】
  10. mq使用不当,造成生产线上环境的服务奔溃问题记录