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 需要用汇编来排错的常见情况 汇编是 ...
随机推荐
- linux网络配置,查看IP地址
linux等等学习参考博客:https://www.cnblogs.com/pyyu/p/9276851.html 1.在安装好的linux上面输入cd /etc/sysconfig/network- ...
- ElasticSearch7.3学习(二十四)----相关度评分机制详解
1.算法介绍 relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度.Elasticsearch使用的是 term freque ...
- Kubernetes API 基础
APIServer 在kubernetes架构概念层面上,Kubernetes由一些具有不同角色的服务节点组成.而master的控制平面由 Apiserver Controller-manager 和 ...
- maven install resources failed: newPosition < 0: (-1 < 0)
添加以下代码在 pom.xml 中,具体参阅这里 <build> <plugins> <plugin> <groupId>org.apache.mave ...
- linux篇-Parse error: syntax error, unexpected ‘new’ (T_NEW) in /usr/local/nginx/html/cacti/lib/adodb
1首先这是基于lnmp模式进行的 2yum安装 yum -y install httpd mysql mysql-server php php-mysql php-json php-pdo 3lib库 ...
- 142_Power BI之同比预测
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近刚好在做一个简单同比预测的模型,预测方法很简单,就是累计同比预测,把MTD展示出来. [video widt ...
- Base64 编码知识,一文打尽!
现在网站为了提升用户的浏览体验越来越多的使用了图片,而这些图片通常以 Base64 的形式存储和加载.因此各位开发工程师肯定对 Base64 毫不陌生了,那么你知道 Base64 究竟是什么,为什么要 ...
- Unity-自定义事件派发器的两次尝试
一.前言: 在游戏开发的很多时候,需要引用其他类的方法,但是一旦类多起来了,相互引用会导致引用关系混乱,极其难以阅读. 以前初次做抖音小游戏时,和一位经验老道的cocos程序员合作,看到我写的代码他不 ...
- String、StringBuilder、StringBuffer——JavaSE基础
String.StringBuilder.StringBuffer String不可变 StringBuilder与StringBuffer均可变 StringBuilder线程不安全,效率高,常用 ...
- 为什么Dapr是比SpringCloud和Istio更优雅的微服务框架?
Dapr 是微软主导的云原生开源项目,2019年10月首次发布,到正式发布 V1.0 版本的不到一年的时间内,github star 数达到了 1.2万(现在已经超过1.7万星),超过同期的 kube ...