2010-12-04 5 views
2

내 프로그램을 디버깅해야하는데 문제는이 프로그램이 몇 가지 매개 변수를 필요로한다는 것입니다. 어떻게 매개 변수를 취하는 프로그램을 디버그 할 수 있습니까 ?? 어떻게 든 런타임에 argc 및 argv 매개 변수를 수정할 수 있습니까 ??런타임에 argv 및 argc 매개 변수를 설정할 수있는 방법이 있습니까?

+4

및 IDE/디버거를? –

+0

짧은 대답은 가능합니다. 긴 답변은 Steve의 질문에 대한 답변을 한 후에 제공됩니다. –

+0

Visual Studio의 경우 예 : http://stackoverflow.com/questions/298708/debugging-with-command-line-parameters-in-visual-studio –

답변

5

가장 좋은 방법은 런타임에 인수를 수정하지 않고 원하는 인수가있는 인스턴스를 디버그하는 것입니다.

  • 오른쪽 솔루션 탐색기에서 프로젝트를 클릭 다음과 같이

    는 Windows의 당신은 Visual Studio에서이 작업을 수행 할 수 있습니다.
  • 구성 등록 정보 -> 디버깅 -> 명령 인수에 원하는 인수를 설정하십시오.
  • F5 키를 눌러 프로그램을 시작합니다 (중단하려는 중단 점을 설정 한 후).

또는 명령 줄에서 정상적으로 프로그램을 시작하고 나중에 디버거를 연결하십시오.

2

명령 줄에서 디버거를 호출하는 경우 명령 줄 인수를 추가하면 디버거가이를 프로그램에 전달할 수 있습니다.

IDE를 사용하는 경우 프로그램에 전달할 인수를 설정하는 방법이 있어야합니다 (예 : Visual Studio의 경우 프로젝트 속성의 "디버깅/명령 인수"에 있음).

그러나 디버그 세션에 있고 다양한 명령 줄 인수를 사용하여 디버깅하려면 프로젝트 속성을 지속적으로 편집해야한다는 것을 알게되었습니다. 따라서 argc/argv 대신 직접 매개 변수를 사용하는 함수에서 내 argc/argv 구문 분석을 수행하고 하드 코딩 된 명령 줄 문자열을 전달하는 디버깅 코드로 조건부로 컴파일해야합니다. IDE의 프로젝트 속성을 편집하는 것보다 소스 파일의 문자열을 수정하는 것이 더 쉽다는 것을 알 수 있습니다.) 또는 명령 줄 인수에 대한 디버깅 코드 프롬프트가 있습니다.

문자열을 argv 스타일 배열로 구문 분석하는 편리한 루틴을 가지고 있는데, 보통 argc/argv을 구문 분석하는 루틴으로 전달할 수 있습니다. 그것은 정확히 꽤 아니다

int main(int argc, char** argv) 
{ 
    if (debugging) { 
     char** dbg_argv; 
     int dbg_argc = argcargv(&dbg_argv, "dummyarg0 my debugging command --line"); 

     parse_options(dbg_argc, dbg_argv); 
    } 
    else { 
     parse_options(argc, argv); 
    } 

    // etc... 
} 

,하지만 난 반복 프로젝트 속성 덤비는 것보다 더 편리하게 찾을 수 :

그래서 상황이 같을 수 있습니다.

+0

나는이 아이디어가 마음에 들었습니다. –

+0

좋은 방법, 많은 점을 배웠습니다. 감사합니다. –

1

당신은 GDB를 사용하는 경우 :

플랫폼 무엇
gdb ./a.exe 
> break main 
> run arg1 arg2 arg3 etc.. 
관련 문제