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 programddd 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把它们全发现。