gdb是一个命令行下的、功能强大的调试器。
(相关资料图)
在学习 gdb 前,我们要知道几个最基本的 cmd 命令。
cmd首先,对于 win10 系统,我们按 Windows + R 键,打开运行窗口,在里面输入 cmd,这样就可以打开 cmd 命令窗口了,是一个黑框。
接下来是一些最基本的命令。
F:打开 F 盘;E:打开 E 盘,等等dir查看文件夹中的文件cd XXX.XXX打开 XXX.XXX文件cd..返回上一级(文件夹)cls清屏(如果你觉得屏幕中的信息太多的话可以用这个命令)
ping [网址]查看一个网站的信息(中括号不用打)
在进行 gdb 调试之前,请先确保你安装了 gdb、g++、gcc 等。
首先,在 cmd 中进入到你的代码的文件夹页面,我的代码在 F 盘,如下图。
现在,我只要进入这个地址就行了。
要进行调试的文件是 ceshi.cpp,我们先在 cmd 中输入 g++ -g ceshi.cpp -o ceshi.exe命令,然后等待一会,文件夹中就会出现一个名为 ceshi.exe的文件。
之后输入 gdb命令,会变成这样。
现在,我们用 file命令来将刚才生成的 .exe文件载入 gdb 调试器中,输入 file ceshi.exe(这里的 ceshi.exe是刚才生成的 .exe文件,你也可以起别的名字),如果出现下面的情况,就说明你成功了。
现在,我们就可以对这份代码进行调试了。
调试这是 ceshi.cpp里面的代码。
//The code was written by yifan, and yifan is neutral!!!#include using namespace std;typedef long long ll;#define bug puts("NOIP rp ++!");templateinline T read() { T x = 0; bool fg = 0; char ch = getchar(); while (ch < "0" || ch > "9") { fg |= (ch == "-"); ch = getchar(); } while (ch >= "0" && ch <= "9") { x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar(); } return fg ? ~x + 1 : x;}int a[10];vector s;void bre() { int n = 10; while (n --) { puts("qwq"); }}int main() { int n = read(), m = read(); for (int i = 1; i <= 8; ++ i) { a[i] = i; s.emplace_back(i); } puts("AK IOI!"); bre(); puts("end!"); return 0;} 我们要学会一些基础的命令。
r运行代码,也就是我们平时的运行,你输入数据,它进行操作,最后输出。l查看代码,l [数字]查看第几行附近的代码(取决于你输入的数字)b [数字或函数名]在第几行设置断点或者在函数处设置断点,代码运行到这一行时就会停下,函数名要带小括号,例如 main 函数就是 main()c从断点处继续运行至下一断点处或者程序结束处。p [变量、数组名或者 STL 容器名]查看变量、数组或者 STL 容器中的元素,如果数组或者 STL 中的元素过多,则只会显示大小。d 断点编号删除断点,i b查看所有断点。watch [变量或数组]观测某个变量或数组,当这个变量或者数组中的元素出现变化时,程序就暂停,并给你显示变化,在程序运行后才可以使用。(gdb) r // 运行Starting program: F:\\8.7\ceshi.exe[New Thread 10196.0x1b74][New Thread 10196.0x173c][New Thread 10196.0xe84]Thread 1 hit Breakpoint 1, main () at ceshi.cpp:3636 n = read(), m = read(); // 碰到断点(gdb) watch n // 添加监测变量 nHardware watchpoint 2: n(gdb) c // 继续运行Continuing.2 3Thread 1 hit Hardware watchpoint 2: n // n 的变化Old value = 0New value = 2main () at ceshi.cpp:3636 n = read(), m = read();(gdb) watch a // 添加监测数组 aWatchpoint 3: a(gdb) cContinuing.Watchpoint 2 deleted because the program has left the blockin which its expression is valid.Thread 1 hit Watchpoint 3: a // a 的变化Old value = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}New value = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}New value = {0, 1, 2, 0, 0, 0, 0, 0, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 2, 0, 0, 0, 0, 0, 0, 0}New value = {0, 1, 2, 3, 0, 0, 0, 0, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 2, 3, 0, 0, 0, 0, 0, 0}New value = {0, 1, 2, 3, 4, 0, 0, 0, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 2, 3, 4, 0, 0, 0, 0, 0}New value = {0, 1, 2, 3, 4, 5, 0, 0, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 2, 3, 4, 5, 0, 0, 0, 0}New value = {0, 1, 2, 3, 4, 5, 6, 0, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 2, 3, 4, 5, 6, 0, 0, 0}New value = {0, 1, 2, 3, 4, 5, 6, 7, 0, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.Thread 1 hit Watchpoint 3: aOld value = {0, 1, 2, 3, 4, 5, 6, 7, 0, 0}New value = {0, 1, 2, 3, 4, 5, 6, 7, 8, 0}main () at ceshi.cpp:3939 s.emplace_back(i);(gdb) cContinuing.AK IOI!qwqqwqqwqqwqqwqqwqqwqqwqqwqqwqend![Thread 10196.0xe84 exited with code 0][Thread 10196.0x173c exited with code 0][Thread 10196.0x1b74 exited with code 0][Inferior 1 (process 10196) exited normally](gdb) info watch查看所有监测。
info locals显示局部变量。
info f显示当前栈的情况。
finish完成函数。
call [函数名]调用子函数。
n从断点处开始,下一行,不进入子函数。
s从断点处开始,下一行,进入子函数(包括快读、STL 的输入函数等等)。
return忽略程序未完成的语句,强行返回。
whatis [变量名]返回变量的数据类型。
set var [变量 = 数值]强行给变量赋值。
q退出。
End!
关键词:
相关文章
-
「学习笔记」gdb 调试的简单操作
-
子弟兵给的安全感!他们深水中一趟趟往返救援
-
中电上半年业绩扭亏为盈 总盈利达50.6亿港元
-
宁波防台风应急响应调整为Ⅳ级
-
异动快报:瑞达期货(002961)8月4日13点49分触及涨停板
-
异动快报:中迪投资(000609)8月4日13点49分触及涨停板
-
广西“10后”的暑假:从参观观众变成博物馆讲解员
-
B站商业化解题,谁在入场淘金?
-
记者:一切迹象都表明B席将留在曼城,并签下续约合同
-
罗马诺:曼城本周将向B席发送续约合同报价
-
胡锡进:在遭遇特大暴雨时,京津冀是同一个命运共同体
-
北京君正部分控股股东、董事、监事及高级管理人员拟减持不超过0.
-
Here we go!罗马诺:吉达国民签下罗马中卫伊巴涅斯,转会费超
-
古林街道福汇园社区:文明吸烟从“我”做起 共创无烟社区环境
-
涿州直击丨海报新闻记者搭乘冲锋舟深入受灾村庄,被困村民多为老
-
运达科技(300440.SZ)拟1.35亿元出售闲置房产和土地 用于补充流动资金
-
中国汽车加速驶向“南方市场”(国际论道)
-
男孩学什么舞蹈好(男孩学什么舞蹈好)
-
黄色预警!北京西部、河北中部等地发生地质灾害的气象风险较高
-
羊汤和什么不能一起吃(羊肉汤和什么不能同吃)
热点图集
-
1酥油酥肉怎么炸的好吃?
-
2暴雨时地漏反水致财务损毁,北京女业主告物业获赔110万元,星河湾物业二审又败诉
-
388.98万、90.01万、91.57万立方米!青岛供水量连续三天刷新纪录
-
4英雄联盟手游称号在哪设置
-
52023年或是“城市NOA元年” 智能驾驶行业发展现状如何?
-
6北京:受灾情影响较大的缴存职工 可全额提取账户内住房公积金
-
7中汽协:6月整车进口量同比增长7.7% 金额同比增长5.3%
-
8国家金融监督管理总局批复同意筹建山西农村商业联合银行股份有限公司
-
9裸车门槛才4.98万元的SUV,也能配赛车座椅、享智能?
-
10内蒙古产假有多少天 2023年内蒙古法定产假新规是几天