gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:54:36 24 4
gpt4 key购买 nike

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

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

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

是否有任何与 gdb 或其他调试器相关的接口(interface)?

在某些情况下:我们正在通过一个包含类(class)、练习(自动更正)的网站来培训学生参加 IOI(国际信息学奥林匹克竞赛)......
代码(C 语言)可以在线编辑、编译、测试和提交(使用 javascript 编辑器)。这种方式不需要安装任何东西(起初),所以更多的人可以“尝试”。

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

所以对于初学者,我们希望他们能够在网站上玩一些基本的代码(情感、数学运算、函数调用、for、while、if)来“看东西”。

最佳答案

如果您仅限于具有特定输入或根本没有输入的程序,您可以使用 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 循环数。

关于c - C调试中符号数组的自动导出(教学目的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com