2013-01-14 4 views
3

Eclipse를 사용하여 C++로 작성한 프로그램을 디버깅하려고합니다. 프로그램은 사용자로부터 입력을받는 것을 포함하지만 콘솔에 입력을 입력해도 코드를 계속 실행하지 않습니다 (입력을 요구할 것입니다). 이 문제를 고치지 않고도 디버그 할 수 없으며 도움이 필요합니다. 감사합니다.콘솔에서 입력을 사용하여 Eclipse 디버깅

코드는 동안 루프는 fgets에 걸리면 :

int main(int argc, const char**argv) { 
    FILE* inputFile = NULL; 

    setlocale(LC_ALL, ""); 
    if(argc == 2){ 
     inputFile = fopen(argv[1], "r"); 
     if (inputFile == NULL){ 
      printf("Problem opening file %s, make sure correct path name is given.\n", argv[1]); 
      return 0; 
     } 
    } 
    else { 
     inputFile = stdin; 
    } 

    char buffer[MAX_STRING_INPUT_SIZE]; 
    // Reading commands 
    while (fgets(buffer, MAX_STRING_INPUT_SIZE, inputFile) != NULL) { 
     fflush(stdout); 
     if (parser(buffer) == error){ 
      printf("ERROR\n"); 
      break; 
     } 
    }; 
    fclose(inputFile); 
    return 0; 
} 
+2

여기에 관련 코드를 첨부 할 수 있습니까? – hmatar

+1

Eclipse 외부에서 프로그램을 독립 실행 형 실행으로 실행해도 동일한 문제가 발생합니까? –

+0

이것이 도움이되는지 확인하십시오 : http://stackoverflow.com/questions/4711098/passing-end-of-transmission-ctrl-d-character-in-eclipse-cdt-console – queen3

답변

4

문제는 이클립스 콘솔 입력을 버퍼링에서 온다. 이 문제를 해결하는 한 가지 방법은 Eclipse가 Windows/DOS 네이티브 콘솔을 사용하여 디버깅하도록 강제하는 것입니다.

절차는 세부 사항 here 설명하지만, 간략하게됩니다 : Eclipse 메뉴 파일에서, 당신 안녕하세요 C++ 명령 줄 프로젝트를 만듭니다

  1. > 새로 만들기> C++ 프로젝트는 프로젝트 폴더에서
  2. 작성 ".gdbinit"텍스트 파일. gdb 디버거 구성을 포함합니다.
  3. ".gdbinit"을 편집하고 다음 줄을 따옴표없이 추가하십시오.
  4. Eclipse에서 "실행 구성>"디버그 구성 "으로 이동하십시오. 왼쪽 창에서 응용 프로그램 이름을 선택하십시오.
  5. "디버거"탭에서 "GDB 명령 파일"이 이제 ".gdbinit"파일을 가리키는 지 확인하십시오. 그렇지 않으면 ".gdbinit"구성 파일의 경로를 입력하십시오.
  6. «적용»및«디버그»를 클릭하십시오. 끝났어! 네이티브 DOS 명령 줄을 시작해야합니다.
+0

'애플리케이션 실행'(dedugging이 아님)도 콘솔 입력을 버퍼링하는 Eclipse를 중지하는 방법은 무엇입니까? –

0

글쎄, 이클립스 콘솔 버퍼가 항상 정상적으로 동작하지 않는다는 것을 안다. 내 경험상, C 나 C++을 사용할 때 최악이다. 이클립스에서 컴파일 된 코드를 실행하려면

,이 도움이 크게 하지만 이클립스에서 발생할 수있는 디스플레이 문제를 제거하지 :

그러나 setvbuf(stdout, NULL, 0, _IONBF);

, 내가 돈을 stdin을 사용하는 동안 Eclipse에서 디버깅에 어떤 영향을 미치는지 알 수 없습니다. 옵션은 Nicolas's answer을 사용하여 DOS 콘솔을 실행하는 것입니다. 조금 더 일하지만 그것이 내가 믿기에 충분할 것입니다.

그리고 여러 지저분한의 코드 해결하지 않고 제정신 출력 버퍼의 어떤 종류를 위해, 이클립스를 통해 코드를 실행하는 동안 위의 라인이 가 사용되어야한다는 것을 유의하시기 바랍니다. 이 줄은 이 실제 사용을 위해 컴파일 할 때으로 주석 처리되어야합니다.

관련 문제