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一样可以直接通过键盘上的上下键来切换当前命令上一次或下一次输入的命令
gdb调试器在windows下的相关内容的更多相关文章
- Ubuntu下GDB调试器的使用
gdb调试器时一款GNU组织开发.发布的UNIX/Linux环境下的程序调试工具,没有图形界面,但功能强大. GDB使用流程: 先编写一个测试文件gdbTest.c 保存后用gcc对文件进行编译,需要 ...
- Linux gdb调试器用法全面解析
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...
- linux基础2——gdb调试器
gdb调试器使用的一般步骤(不断更新完善): 1.编译过程中要用-g参数来添加调试符号——gcc test.c -g: 2.gdb启动可执行文件——gdb a.out: 3.出现gdb符号表示启动成功 ...
- GCC编译器和GDB调试器常用选项
http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello ...
- 使用GDB调试器(一)
使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软 ...
- Mac os系统gdb调试器的安装与使用
Mac os系统gdb调试器的安装与使用 1.简介 Mac os下的Terminal 终端中默认情况下并没有安装gdb调试器,但是可以通过gcc编译器进行代码编译,如果出错了就需要通过gdb调试器进行 ...
- Linux C 程序 函数,数组,指针,gdb调试器(SEVEN)
函数,数组,指针,gdb调试器 1.函数定义 如果明确指定返回类型,默认为int 参数传递:实参对形参的参数传递是单向的,实参只是把自己的值赋给形参. 形参的 ...
- GDB调试器
/*this project used for gdb debug c programs*//*At first,using compile command turn out the executab ...
- 第二章排错的工具:调试器Windbg(下)
感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2 读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1 需要用汇编来排错的常见情况 汇编是 ...
随机推荐
- 浅谈 UNIX、Linux、ios、android 他们之间的关系
开源Linux 一个执着于技术的公众号 Unix, 简化形成了Linux,Linux则是Android的内核,而苹果则是使用unix系统作为ios和macos的内核. 几个系统出现的时间 UNIX系统 ...
- 防火墙之ipset表应用
简介 由于公司线上生产环境firewalld默认都是关闭的,所以只能依赖iptables的表来方便管理IP黑白名单. 提示线上生产环境不要随便重启iptables,会导致docker已经映射好的关系表 ...
- netty系列之:netty中常用的xml编码解码器
目录 简介 XmlFrameDecoder XmlDecoder 总结 简介 在json之前,xml是最常用的数据传输格式,虽然xml的冗余数据有点多,但是xml的结构简单清晰,至今仍然运用在程序中的 ...
- 找到占用CPU最高的Java线程
一.找到java进程id jps查看当前运行的java进程id [root@localhost ~]# jps 18354 Jps 9381 Bootstrap 二.找到内存和CPU占用最高的线程pi ...
- 理解RESTful Api设计
REST REST(REpresentational State Transfer)是 Roy Fielding 博士于 2000 年在他的博士论文中提出来的一种软件架构风格(一组架构约束条件和原则) ...
- Redis - 为什么 Redis 是单线程的?
Redis中work线程是单线程的.也就是对于业务数据的操作是单线程的. Redis中存在多线程操作 异步关闭文件 异步将缓冲区冲洗到磁盘文件中 异步删除键值对 Redis是基于内存的,所以cpu不是 ...
- Java泛型知识总结
泛型 前言 在没有泛型之前,程序员必须使用Object编写适用于多种类型的代码.很繁琐,也不安全. 泛型的引入使Java有了一个很强的类型系统,允许设计者详细地描述变量和方法的类型要如何变化. 在普通 ...
- python实现对简单的运算型验证码的识别【不使用OpenCV】
最近在写我们学校的教务系统的手机版,在前端用户执行绑定操作后,服务器将执行登录,但在登录过程中,教务系统中有个运算型的验证码,大致是这个样子的: 下面我们开始实现这个验证码的识别. 1.图片读取 从网 ...
- c++ 超长整数减法 高精度减法
c++ 超长整数减法 高精度减法 实现思路 和加法类似,设置临时变量记录借位 当对应位数相减得到的结果大于等于0时,该位数字为本身值,否则需要加上借位的10.则\(t=(t+10)%10\) 打卡代码 ...
- 论文解读(GraphMAE)《GraphMAE: Self-Supervised Masked Graph Autoencoders》
论文信息 论文标题:GraphMAE: Self-Supervised Masked Graph Autoencoders论文作者:Zhenyu Hou, Xiao Liu, Yukuo Cen, Y ...