2011-05-01 3 views
3

어린이 (10-15 세, 교육은 웹 사이트를 통해)에게 C를 가르쳐야하고 단계별 실행을 보여줄 수 있기를 원합니다. 프로그램이지만 디버거를 직접 사용하지 않기를 바란다. (너무 복잡하기 때문에 초보자 다.)C에서 기호 배열의 자동 내보내기 (교육 목적)

내 아이디어는 필요한 모든 데이터를 미리 계산하고 코드에 현재 줄이있는 멋진 자바 스크립트 애니메이션과 함께 표시하는 것이 었습니다 (변수의 값과 표준 출력 값).

내가 필요한 것은 C 코드에서 디버거를 실행하고 각 가능한 단계 (구조체, 기본 변수 및 배열)에서 변수 값을 내보내는 방법입니다.

gdb 또는 다른 디버거에 인터페이스가 있습니까?

어떤 상황에 대한


: 우리가 컴파일, 편집 할 수 있습니다 (C에서) 과정과 웹 사이트, exercices가 (자동 보정) 비록 IOI (국제 정보 올림피아드) ... 코드 학생들을 교육하고 있습니다, 테스트를 거쳐 온라인으로 제출됩니다 (자바 스크립트 편집기 사용). 이 방법은 처음에는 아무 것도 설치할 필요가 없기 때문에 더 많은 사람들이 "시도"할 수 있습니다.

기본적인 "단계별"디버깅은 초보자에게 변수가 수정되는 방법, "for"또는 "while"이 작동하는 방법을 보여주었습니다. 교사로서 화이트 보드에서 할 수있는 일의 종류. 보다 고급 인 학생들은 IDE를 설치하고 디버거를 사용하거나 사용하지 않을 것입니다.

초보자를 위해 웹 사이트에서 몇 가지 기본 코드 (영향, 수학 연산, 함수 호출, while, if)를 "물건보기"로 재생할 수 있기를 바랍니다.

+0

'예상'을 사용하는 것이 좋습니다. 실패하면 pty를 사용하여 솔루션을 롤백해야합니다. 당신은 아마도 더 높은 수준의 해결책을 찾고있을 것입니다. –

+1

이것은 좋은 생각이지만 구현하기가 어렵습니다. 내가 생각할 수있는 것은 GDB를위한 일종의 AJAX 인터페이스이다. –

답변

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 스크립트) : gdb -x trace.gdb -batch try

break main 
run 
while 1 
info locals 
step 
end 
quit 

결과

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이 있습니다. 따라서 스크립트를 조정하여 자바 스크립트로 재생 가능한 무언가를 만들 수 있도록 출력을 구문 분석 할 수 있습니다.

또한 프로그램에서 반복적으로 루프가 발생하지 않도록해야합니다. 아마도 convenience variables을 사용하여 스크립트의 반복 횟수를 제한해야합니다.

+0

감사합니다. 나는 무언가가 이미 존재한다고 호핑을 치고 있었지만 나는 그것을 스스로해야 할 것 같다. 나중에 확실히 오픈 소스 할 것입니다. –