GDB简单调试
最近在开始刷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时停下来 |
最新文章
- Oracle 环境变量NLS_LANG
- Wireshark抓包分析/TCP/Http/Https及代理IP的识别
- c中使用gets() 提示warning: this program uses gets(), which is unsafe.
- NGUI 指定视口大小
- js输出到控制台
- jQuery &; CSS 制作金属质感的选择按钮
- 安装 Dubbo 注册中心(Zookeeper-3.4.6)--单节点
- PHP 下载文件时自动添加bom头的方法
- JAVA敏捷开发环境搭建(转载)
- VIM配置(转载)
- 关于NPC和NP-Hard问题
- Word Amalgamation(hdoj1113)
- CodeForces 370C. Mittens
- 原生封装ajax
- neutron二
- QT * 使用VS2013+QT5.7.0实现简单计算器
- mysql B+tree
- notepad使用列选
- replicatedhq-ship 基于Kustomize 项目的快速kubernetes 应用部署工具
- Android 真机投影到PC端,真机投影工具;Vysor
热门文章
- UML表示类图和对象图
- 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)
- Django基础之jQuery操作
- 如何用纯 CSS 创作六边形按钮特效
- 如何将本地的项目推送至git仓库
- 勒索病毒[recoverydata54@cock.li].harma,这样恢复文件。
- 第一个SpringMVC程序
- 15 Scrapy框架之CrawlSpider
- js截取字符串相关的知识点
- Nginx(web服务器)与Tomcat(应用服务器)搭建集群