在C调试中自动导出符号数组(教学目的)

时间:2011-05-01 10:10:45

标签: c debugging export

我需要向孩子们教授C(10-15岁,通过网站进行教学),我希望能够向他们展示一个程序的一步一步执行,但我不希望他们使用直接调试器(对他们来说太复杂了,他们是初学者)。

我的想法是预先计算所有需要的数据并向他们展示(使用酷的javascript动画,代码中的当前行,变量的值和标准输出)。

我需要的是一种在C代码上运行调试器并在每个可能的步骤导出变量值的方法(没有结构,只有基本变量和数组)。

是否有任何可以与gdb或其他调试器接口的接口?

<小时/> 在某些情况下:我们正在培训学生参加IOI(国际信息学奥林匹克竞赛),虽然这是一个有课程,练习(自动更正)的网站...... 代码(在C中)可以在线编辑,编译,测试和提交(使用javascript编辑器)。这种方式无需安装任何东西(首先),所以更多人可以“尝试”。

基本的“一步一步”调试只是向初学者展示如何修改变量,“for”或“while”如何工作。你可以在白板上做老师的那种东西。更高级的学生将安装一些IDE,并且/或者不会使用调试器。

因此,对于初学者,我们希望他们能够在网站上播放一些基本代码(影响,数学运算,函数调用,for,while,if)来“看东西”。

1 个答案:

答案 0 :(得分:1)

如果您仅限于具有特定输入或根本没有输入的程序,您可以使用gdb脚本,如下所示:

try.c(输入程序):

#include <stdio.h>

int main()
{
        int i;
        for (i = 0; i < 10; i++)
        {
                printf("the number now is %d\n", i);
                i++;
        }
        return 0;
}

trace.gdb(一个基本的gdb脚本):

break main
run
while 1
info locals
step
end
quit

gdb -x trace.gdb -batch try

的结果
Breakpoint 1 at 0x40053c: file try.c, line 6.

Breakpoint 1, main () at try.c:6
6               for (i = 0; i < 10; i++)
i = 0
8                       printf("the number now is %d\n", i);
i = 0
the number now is 0
9                       i++;
i = 0
6               for (i = 0; i < 10; i++)
i = 1
8                       printf("the number now is %d\n", i);
i = 2
the number now is 2
9                       i++;
i = 2
6               for (i = 0; i < 10; i++)
i = 3
8                       printf("the number now is %d\n", i);
i = 4
the number now is 4
9                       i++;
i = 4
6               for (i = 0; i < 10; i++)
i = 5
8                       printf("the number now is %d\n", i);
i = 6
the number now is 6
9                       i++;
i = 6
6               for (i = 0; i < 10; i++)
i = 7
8                       printf("the number now is %d\n", i);
i = 8
the number now is 8
9                       i++;
i = 8
6               for (i = 0; i < 10; i++)
i = 9
11              return 0;
i = 10
12      }
i = 10
0x000000300161ebbd in __libc_start_main () from /lib/libc.so.6
No symbol table info available.
Single stepping until exit from function __libc_start_main,
which has no line number information.

Program exited normally.
trace.gdb:6: Error in sourced command file:
No frame selected.

ways to change gdb's output因此您可以调整脚本以使输出可解析为允许您通过javascript播放的内容。

并且您还需要确保程序不会无休止地循环,可能是通过使用convenience variables来限制脚本中的while循环次数。