GDB/DDD调试器的使用
GDB/DDD调试器的使用
0. 介绍
GDB是一个强大的GNU调试器(Both Pascal and C++!),可以提供非常细致的调试控制,小到监控变量,大到条件表达式控制调试进程,都可以在GDB中进行,而且不需重新编译程序,比某些图形化的调试器更为强大。
DDD是GDB的图形化前端,可以以GUI的形式进行debug,也可以手动操控其中的GDB终端。而且,它还能展示各种各样的数据结构。(上几张图感受一下)
最重要的是,NOIP官方环境包含GDB和DDD!
1. 使用姿势
要使用GDB和DDD,需要在程序编译时加入-g选项,以生成附加的调试信息。
这需要在终端里编译程序,命令如下:
g++ program.cpp -o program -g -lm
pascal和C同理,替换为自己语言的编译指令即可。
接下来,只需要在终端里运行gdb program或ddd program,就可以开始使用调试功能了。
如果运行无误,打开GDB后将会出现(gdb)字样,打开DDD后则会弹出一个图形化窗口。
下面,让我们来开始调试的旅程吧!
1.1 GDB
1.2 DDD
2. 实战
我用下面这段代码来演示调试功能:
#include <cstdio>
inline int read()
{
char c=getchar();
while(c<'0' || c>'9') c=getchar();
int res=0;
while(c>=0 && c<=9) res=res*10+c,c=getchar();
return res;
}
int main()
{
int n=read();
int a[10001],b[10001];
for(int i=1;i<+n;i++) a[i]=read();
for(int i=1;i<=n;i++) b[i]=read();
double ans=0;
for(int i=1;i<=n;i++) ans*=a[i],ans/=b[i];
printf("%.2f",ans);
return 0;
}
可以看出,这段代码有诸多问题。接下来我要通过gdb把它们全发现。