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 需要用汇编来排错的常见情况 汇编是 ...
随机推荐
- 【原创】记一次对X呼APP的渗透测试
获取CMS并本地安装 X呼是一款开源的客服CMS系统,访问官网,下载安卓版本的app和源码本地搭建: 发现这cms预留admin表中的用户就不少.... 直接用预留的密码解密,然后就能登录手机APP了 ...
- vuepress搭建UI组件库文档踩坑篇
为了实现组件效果预览及代码展示可折叠功能,使用了插件vuepress-plugin-demo-container 相关配置可参考官网说明文档 第一步 安装插件 npm i - D vuepress-p ...
- 百度3D离线地图开发,3D离线地图开发,百度地图离线开发
3D离线地图介绍(3D离线采用矢量数据作为地图基础,可保持地图数据最新) 一.开发中引用3D离线地图(可独立部署通过内外IP+端口进行访问,也可拷贝js库文件到项目中通过绝对路径访问) 1).离线AP ...
- 汇编语言中loop循环编程
(1)向内存0:200~ 0:23f依次传送数据0~63(3FH) (2)同上简化后的代码,要求九行以内
- HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验
AR技术已经被广泛应用于营销.教育.游戏.展览等场景.通过2D图像跟踪技术和3D物体跟踪技术,用户只需使用一台手机进行拍摄,即可实现海报.卡牌等平面物体以及文物.手办等立体物体的AR效果.尽管近年来2 ...
- [算法学习] dsu on tree
简介 dsu on tree跟dsu没有关系,但是dsu on tree借鉴了dsu的启发式合并的思想. 它是用来解决一类树上的询问问题,一般这种问题有以下特征: \(1.\)只有对子树的查询: \( ...
- Random方法中的nextInt(int arg0)方法讲解
nextInt方法会生成一个随机的在5以内的数,负载均衡随机策略底层用的就是这个方法: Random rand = new Random(); int index = rand.nextInt(5); ...
- k8s client-go源码分析 informer源码分析(5)-Controller&Processor源码分析
client-go之Controller&Processor源码分析 1.controller与Processor概述 Controller Controller从DeltaFIFO中pop ...
- 深入C++05:运算符重载
运算符重载 1.复数类 运算符重载目的:使对象运算表现得和编译器内置类型一样: 复数类例子 #include<iostream> using namespace std; class CC ...
- 7. Docker CI、CD
在上图这个新建的docker-compose.yml文件中把刚才的代码粘贴进去. 可把上述文件保存后,然后到/etc/ssh/sshd_config文件中更改下对应的端口号即可. 然后重新启动sshd ...