2012-08-15 2 views
2

일반적으로이 쉘에서 내 tcl 스크립트를 호출합니다.인수를 사용하여 tchsh에서 tcl 스크립트를 실행하는 방법

> tclsh8.5 mytest.tcl -opt1 foo -opt2 bar 

C++에서 구현 된 일부 모듈로 인해 디버깅을 위해 gdb를 실행해야하는 경우. 나는 gdb를 통해 tclsh를 시작해야한다. 그래서 문제는 인수로 tcl sh에서 스크립트를 실행하는 방법입니다. 간부를 사용하여 그 사람 다른 프로세스와 손실을 내 브레이크 포인트 설정과 같은 좋지 않은

tclsh> run mytest.tcl -opt1 foo -opt2 bar 

:

내가 좋아하는 뭔가를해야합니다.

tclsh> exec mytest.tcl -opt1 foo -opt2 bar 

답변

3

나는 다음과 같은 무언가가 당신을 위해 일해야한다고 생각합니다 :

set argv [list -opt1 foo -opt2 bar] 
set argc 4 
source mytest.tcl 

그래서 실행하는 당신은 Tcl 코드에서 인수가 올바른 후 바로 소스 얻을 수는 argv와는 argc를 설정합니다.

또는 gdb run 명령을 사용하면 디버깅 할 실행 파일에 명령 줄 인수를 전달할 수 있습니다. 그래서 디버깅 tclsh 그럼 다음과 같이 run 명령의 문제점은 무엇입니까? 당신이 당신의 응용 프로그램을 디버깅 할 때

$ tclsh test.tcl 
This is a test 
$ gdb -q tclsh.exe 
(no debugging symbols found) 
(gdb) run test.tcl 
Starting program: /usr/bin/tclsh.exe test.tcl 
+0

"run mytest.tcl -opt1 foo ..."멋진데. GDB에서 정확히 어떻게합니까? 1> GDB tclsh 2 (tclsh 입력), CTRL-C를 눌러 (로드 미래의 lib 디렉토리에 계류중인 혈압을) 3. (GDB)을 쉘 GDB로 전환 myCppCode.cc:123을 깰 4. (GDB) continue 5. 처음부터 시작 하시겠습니까? (y 또는 n) 여기서 어떻게해야합니까? "예"를 선택하면 중단 점에서 중지되지 않습니다. "no"를 선택하면, tclsh로 돌아가 아무 것도하지 않습니다. 놓친 것이 있습니까? – Stan

+0

gdb에서 tclsh를 실행할 때 표준 (gdb) 명령 프롬프트를 받아야합니다. 여기서 중단 점을 설정 한 다음 지정된 인수로 프로그램을 실행할 수 있어야합니다. – Jackson

0

이유는 단지

gdb --args tclsh8.5 mytest.tcl -opt1 foo -opt2 bar 

를 실행하지 않는 : 나는 다음을 수행 할 수있어 Cygwin에서 아래의 예를 들어

run mytest.tcl -opt1 foo -opt2 bar 

?

+0

중단 점을 설정해야하거나 직접 실행하고 종료합니다. – Stan

+1

gdb가 대화식 모드로 시작됩니다. 중단 점을 설정하고'run' 명령을 계속할 수 있습니다. – GrAnd

1

gdb 세션에서 tclsh를 실행하고 인수를 설정하면 다음과 같은 작업을 수행합니다 ($은 셸 프롬프트이고 (gdb)은 gdb 프롬프트이며 gdb가 인쇄하는 모든 메시지를 생략했습니다) :

$ gdb tclsh 
(gdb) set args mytest.tcl -opt1 foo -opt2 bar 
(gdb) ... set some breakpoints ... 
(gdb) run 

은 또한 스크립트에서 무슨 일이 일어나고 있는지에 따라 환경을 설정 set env FOO=bar을해야 할 수도 있습니다. Tcl 자신의 빌드 파일은 테스트 스위트 실행을 디버깅 할 때 인수를 전달하기 위해 이와 같은 기술을 사용합니다.

+0

아, 나는 env FOO = bar를 설정하지 않았습니다. 그건 내 중단 점이 릴리스 버전에 붙어 있기 때문에 결코 실행되지 않았습니다. – Stan

관련 문제