我需要向孩子们教授C(10-15岁,通过网站进行教学),我希望能够向他们展示一个程序的一步一步执行,但我不希望他们使用直接调试器(对他们来说太复杂了,他们是初学者)。
我的想法是预先计算所有需要的数据并向他们展示(使用酷的javascript动画,代码中的当前行,变量的值和标准输出)。
我需要的是一种在C代码上运行调试器并在每个可能的步骤导出变量值的方法(没有结构,只有基本变量和数组)。
是否有任何可以与gdb或其他调试器接口的接口?
<小时/> 在某些情况下:我们正在培训学生参加IOI(国际信息学奥林匹克竞赛),虽然这是一个有课程,练习(自动更正)的网站...... 代码(在C中)可以在线编辑,编译,测试和提交(使用javascript编辑器)。这种方式无需安装任何东西(首先),所以更多人可以“尝试”。
基本的“一步一步”调试只是向初学者展示如何修改变量,“for”或“while”如何工作。你可以在白板上做老师的那种东西。更高级的学生将安装一些IDE,并且/或者不会使用调试器。
因此,对于初学者,我们希望他们能够在网站上播放一些基本代码(影响,数学运算,函数调用,for,while,if)来“看东西”。
答案 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循环次数。