Linux C/C++开发环境和编译调试(二)详细记录如何使用GDB进行调试
2021/11/7 7:13:31
本文主要是介绍Linux C/C++开发环境和编译调试(二)详细记录如何使用GDB进行调试,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
## 这篇博客主要是用来记录前些天复习GDB调试的过程
调试前的准备
Linux C/C++开发环境和编译调试(一)
需要关闭-o,打开-g,打开-Wall
来看一下加入代码调试信息(-g)之后生成的可执行文件大小和没加的对比:
root@ziggy-virtual-machine:~/learn_gdb# gcc -g test.c -o demo1 root@ziggy-virtual-machine:~/learn_gdb# gcc test.c -o demo_g root@ziggy-virtual-machine:~/learn_gdb# ll -h demo1 demo_g -rwxr-xr-x 1 root root 10K 10月 31 12:07 demo1* -rwxr-xr-x 1 root root 8.6K 10月 31 12:08 demo_g*
GDB命令
启动:
(1)打开gdb调试:
#格式:gdb [exec_filename] #例如: gdb demo1
退出:quit
(2)为程序设置参数/获取设置的参数(为程序设置命令行参数,获取参数列表)
set args 5 8 show args
如果不加-g的编译选项,则未向可执行文件中加入源代码信息,所以无法在gdb中查看源码
(3)查看程序源码:
#1.查看当前文件: list/l(默认位置显示) list/l 行号 list/l 函数名 #2.查看非当前文件: list/l 文件名:行号 list/l 文件名:函数名 #3.设置显示的行数 show list/listsize set list list/listsize 行数
如果按回车,则默认继续输入list,继续显示下面的代码片段
多文件情况:
root@ziggy-virtual-machine:~/learn_gdb# g++ -o demo_multi bubble.cpp main.cpp select.cpp -g
默认显示main函数:
如果想要看其他源文件:使用l filename:行号
或 l filename:函数名
设置断点
#1.设置断点 b/break 行号 b/break 函数名 b/break 文件名:行号 b/break 文件名:函数 #2.查看断点 i/info b/break #3.删除断点 d/del/delete 断点编号(这个编号是info查出的) #4.设置断点效果: dis/disable 断点编号(设置断点无效) enable 断点编号(设置断点有效) #5.设置条件断点 b/break 10 if i==5
设置条件断点:
运行程序
start:程序停在第一行 run:遇到断点才停 c/continue:继续运行,直到下一个断点 n/next:向下执行一行代码(不进入函数体) s/step:但不调试(可以进入函数体) finish :跳出函数体 p/print 变量名:打印变量值 ptype 变量名:打印变量类型 set var 变量名=变量值 until:跳出循环 自动变量: display num(自动打印指定变量的值) i/info display undisplay 编号
先设置断点:b 8
再运行代码直到达到断点(还未执行断点所在的那行)
使用c,继续运行,直到到达下一个断点
使用n向下执行一行代码(不可进入函数体),使用s可进行单步调试(可进入函数体,使用finish跳出函数体)
print不能自动在s单步调试时自动打印所指定的变量值,但是display可以
使用display自动打印指定变量值,i display查看已设置为自动打印的变量值,undisplay 编号用于取消某个编号的变量的自动打印,注意这里的编号是i display中第一列的值
finish跳出函数
条件断点:
设置变量值
len为5,我们设置i = 4,使其下一次即跳出循环
这篇关于Linux C/C++开发环境和编译调试(二)详细记录如何使用GDB进行调试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法