gdb调试器在windows下的相关内容

1.gdb调试器在visual studio或dev c++中也有类似的调试图形化可视界面,但是gdb不同的是它是由命令行组成,他的界面对于习惯图形化可视界面的用户来说一时间会不知所措
2.通过gcc编译源文件的时候需要引入-g表示在编译的时候引入一些调试的信息,当然前面的随笔也讲过如果没有加入-o那么最后编译出来的在windows下的文件是a.exe,注意这个区别
注意:gcc中的-std指令可以选择编译源文件的编译器的编译标准
eg:gcc xx.c -std=c99(使用c99标准编译该文件)
3.gdb中第一种在dos系统下进入的方法:
gdb 文件名.exe
gdb中第二种进入的方法:直接在dos系统下输入gdb进入gdb调试界面,但是此时gdb调试程序并不知道应该调试的是那个文件,这时候需要我们去指定调试的文件,语法规则如下
file 文件名.exe
以上的命令就可以实现所需要调试程序的加载(注意这边的file不可以简写成f,f并不会被gdb程序读取)
输入上述指令后,就可以进入gdb调试界面了
4.gdb中指令存在简写方式
(1)run == r,运行当前程序,并且会说明是否正常退出以及正常运行
(2)quit == q,退出gdb调试,回到原先的dos系统下
(3)break == b,设置断点
语法1:b 函数名
会在相应的函数名下的第一条语句所在的命令行设置断点
eg:b main(那么运行到main函数的第一条语句就会暂停,断点在那边,直到接收到c命令才会继续进行)
语法2:b 程序名.cpp:设置断点的命令行行数
会在相应程序的对应行数下的命令行设置断点
eg:b test.cpp:11(那么运行到该源代码的第11行的时候就会暂停)
语法3:b 断点所在的命令行数
会在加载后的程序的源代码中的对应行添加断点
eg:b 5(那运行到该源代码的第五行就会暂停)
删除断点的命令:
delete == d,如果直接输入d,那么默认删除所有断点,如果输入d 数字,则会删除相对应数字编号的断点
tbreak == tb,设置临时断点,就是当程序运行到这停止后就会删除这个临时断点
(4)continue == c,一般和断点配套使用,是程序继续进行
(5)next == n,表示单步执行,一般也要和断点相互配套执行,不同的是,continue会一直执行到下一个断点或者程序终止,而next则是一行一行的执行,可以更方便的精细调试,注意输入n指令的 时候打印的代码行并不是表示该行代码已经被执行,而是说这行代码将要被执行
(6)step == s,进入即将被执行的函数内部,如果是命令next,他会直接跳过除了main函数之外的其他函数,而只是将这个被调用函数的执行结果输出,并不会进入该被调用函数的内部
(7)list == l,他会显示即将被执行的下十行代码,可以多次输入该命令,会不断输入后面十行的指令,类似于第一次输出一到十,第二次输出十一到二十,直到所有的命令都被输出为止,期间如果有其他的操作使得即将被执行的代码行行数变化,那么l打印出来的内容也会相应发生变化
(8)print == p,打印出相应变量的值
(9)info == i,查看相对应的调试命令的信息
eg:i b:查看当前的所有设置的断点信息
p 变量名:打印出相应变量的值
p 数组名:打印出数组中的所有成员
p 函数名:打印出函数所在的地址
感觉这个命令的作用有点类似于dev中的add watch
(10)watch,watch设置监视点,如果他监视的变量的值发生变化,gdb就会停下来(暂时没看出来这个设置监视点的好处,等以后详细学习后再来补充)
(11)backtrace == bt,打印所有栈帧信息
(12)up,将调用栈向上移动一个单位,也就是说将栈帧往上移动,同理down就是将调用栈下移一个单位,也就是说将栈帧往下移动,类似于在bt打印的情况下,在当前所处的栈帧位置下进行上移或下移,注意是整体的上下移动,不是当前栈帧的移动
(13)frame,调出栈帧信息,可以与backtrace配合使用
frame i,表示调出第i层的栈帧信息,这样子就可以通过p来打印出对饮栈下面的变量值,当然平时可以直接通过up,down实现栈帧的转换

gdb中的调试技巧
1.如果有命令需要重复多次输入,可以在输入一次该命令后一直按enter键就可以了,enter键表示重复上一次的命令操作
2.如果只记得开头字母的gdb命令,忘了详细名称可以输入开头字母+tab键(按两次)来查看相关首字母开头的命令(自动补全命令),如果有多个选项出现的时候,则会打印出所有的选项,否则会直接补全
3.gdb和windows一样可以直接通过键盘上的上下键来切换当前命令上一次或下一次输入的命令

posted @   banyanrong  阅读(329)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示