最近在开始刷LeetCode,也开始在Linux上写代码,直接gcc编译,在调试的时候,需要用到gdb调试,所以在这里会不定期更新我学习到的gdb调试。

先编译成可执行文件

首先我们使用g++或者gcc编译成可执行文件,记得要加-g编译选项,表示生成调试信息,以便我们使用gdb调试。

开始调试

假设我们有一个 main.cpp文件,编译链接后生成了main这个可执行文件,进行调试:

gdb main

设置断点

开始调试后,我们可以设置断点:

break 23

这个表示对源文件的23行设置一个断点。以上两步设置完可以看到以下:

第一个框里面就是我们开始调试输入的命令,下面是生成的调试信息。第二个框里面就是我们输入的设置断点的命令了。

如果有多个源文件共同生成的,可以指定源文件的行数进行调试:

break main.cpp:23

其实,break也可以用b来简写。

使用:

info b

可以查看到设置的断点信息:

开始运行

现在我们来介绍设置完断点后,运行时候我们的调试规则,先看一下截图,是一个在调试的过程:

图可能看起来很不想继续看,相信我,我以前也是这种态度,但是请你继续看,因为自己输入的东西很少,几乎都是它生成的信息更多。我已经把我们写的命令用方框框起来了。

现在一个命令一个命令的解释。

run

顾名思义,就是开始执行程序,直到执行到断点停下来。 在图中我简写成了r即可.

step,next

这两个都是单步调试,不同在于,step是可以进入到执行的函数中间去调试,next是直接跳过这个函数的调试,直接到下一行。

list

从图中可以看到,在我调试到第16行的时候,再输入一个list,会输出以16行为中心的代码。没错,list就是展示我们调试信息附近的代码。

printf

在图中我也是简写成p,都是可以的。可以明确看到,我们可以使用

p 变量名

来打印一个变量值。图中nums[i]此时的值是3,int型,地址为0x607010

quit

简写为q,就是退出GDB调试。

finish

结束GDB调试。

总结

gdb 可执行文件
(gdb)start 表示开始调试
(gdb) n 表示执行下一步(不会进入函数)
(gdb) step 表示执行下一步(会进入函数)
(gdb) b Line 给第Line行设置断点
(gdb) b xx.cpp:Line 给xx文件第Line行设置断点
(gdb) quit 表示退出调试
(gdb) p 变量名 可以查看变量的值
(gdb) finish 表示直接执行到当前函数结束
(gdb) list 可以显示当前部分代码
(gdb) list Line 可以显示Line行附近
(gdb) info b 显示断点信息
(gdb) d num(显示信息中的断点编号) 删除指定断点
(gdb) c (continue) 跳到下一个断点
(gdb) ptype 变量名 查看变量类型
(gdb) set argv[i]=x 设置参数值
(gdb) display 变量 跟踪变量,看每一步的值
(gdb) info display 显示跟踪信息
(gdb) undisplay num(显示信息中的编号) 放弃跟踪值
(gdb) break Line if i==6 条件断点。在Line行设置断点,并运行到i=6时停下来

最新文章

  1. Oracle 环境变量NLS_LANG
  2. Wireshark抓包分析/TCP/Http/Https及代理IP的识别
  3. c中使用gets() 提示warning: this program uses gets(), which is unsafe.
  4. NGUI 指定视口大小
  5. js输出到控制台
  6. jQuery & CSS 制作金属质感的选择按钮
  7. 安装 Dubbo 注册中心(Zookeeper-3.4.6)--单节点
  8. PHP 下载文件时自动添加bom头的方法
  9. JAVA敏捷开发环境搭建(转载)
  10. VIM配置(转载)
  11. 关于NPC和NP-Hard问题
  12. Word Amalgamation(hdoj1113)
  13. CodeForces 370C. Mittens
  14. 原生封装ajax
  15. neutron二
  16. QT * 使用VS2013+QT5.7.0实现简单计算器
  17. mysql B+tree
  18. notepad使用列选
  19. replicatedhq-ship 基于Kustomize 项目的快速kubernetes 应用部署工具
  20. Android 真机投影到PC端,真机投影工具;Vysor

热门文章

  1. UML表示类图和对象图
  2. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)
  3. Django基础之jQuery操作
  4. 如何用纯 CSS 创作六边形按钮特效
  5. 如何将本地的项目推送至git仓库
  6. 勒索病毒[recoverydata54@cock.li].harma,这样恢复文件。
  7. 第一个SpringMVC程序
  8. 15 Scrapy框架之CrawlSpider
  9. js截取字符串相关的知识点
  10. Nginx(web服务器)与Tomcat(应用服务器)搭建集群