Автоматический экспорт массива символов в С отладке (учебная цель) - PullRequest
3 голосов
/ 01 мая 2011

Мне нужно преподавать C детям (10-15 лет, обучение через веб-сайт), и я хочу показать им пошаговое выполнение программы, но я не хочу, чтобы они использовалинепосредственно отладчик (слишком сложный для них, они просто новички).

Моя идея состояла в том, чтобы предварительно вычислить все необходимые данные и показать их им (с классной анимацией JavaScript, с текущей строкой вкод, значения переменных и стандартный вывод).

Мне нужен способ запуска отладчика в коде C и экспорта значений переменных на каждом возможном этапе (без структуры, простобазовые переменные и массивы).

Есть ли какой-нибудь интерфейс к gdb или другому отладчику, который может к этому подключиться?


Для некоторого контекста: мы готовим студентов для IOI (Международной олимпиады)в информатике) через веб-сайт с курсами, упражнениями (автоматически исправляется) ... Код (на C) можно редактировать, компилировать, тестировать и отправлять онлайн (с помощью редактора JavaScript).).Таким образом, не нужно ничего устанавливать (сначала), поэтому больше людей могут просто «попробовать».

Базовая отладка «пошагово» состояла только в том, чтобы показать новичкам, как изменяются переменные, как «для»"или" пока "работают.То, что вы можете делать на доске в качестве учителя.Более продвинутые ученики установят некоторые IDE и / или не будут использовать отладчик.

Поэтому для новичков мы хотим, чтобы они могли играть на веб-сайте с базовым кодом (аффекты, математические операции, функции).призови, пока, если), чтобы "увидеть вещи".

1 Ответ

1 голос
/ 02 мая 2011

Если вы ограничены программами с определенным вводом или вообще без ввода, вы можете использовать сценарии 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.

Существует способов изменить вывод gdb , так что вы можете настроить сценарий так, чтобы вывод обрабатывался таким образом, чтобы вы могли сделать его воспроизводимым с помощью javascript.

И вам также нужно убедиться, что программа не зацикливается бесконечно, возможно, используя вспомогательные переменные для ограничения количества циклов while в скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...