Как выполнить tcl-скрипты в tchsh с аргументами
Обычно я запускаю свой tcl-скрипт под shell таким образом.
> tclsh8.5 mytest.tcl -opt1 foo -opt2 bar
В случае необходимости запустить GDB для отладки из-за некоторых модулей, реализованных в C++. Я должен запустить tclsh через GDB. Так что вопрос в том, как выполнить мой скрипт в tcl sh с аргументами.
Мне нужно что-то вроде:
tclsh> run mytest.tcl -opt1 foo -opt2 bar
Использование exec не является идеальным, поскольку оно выполняет другой процесс и теряет мои настройки контрольных точек.
tclsh> exec mytest.tcl -opt1 foo -opt2 bar
3 ответа
Я думаю, что-то вроде следующего должно работать для вас:
set argv [list -opt1 foo -opt2 bar]
set argc 4
source mytest.tcl
Так что установите argv и argc, чтобы получить правильные аргументы, а затем просто используйте исходный код в вашем коде Tcl для выполнения.
В качестве альтернативы команда gdb run позволяет передавать аргументы командной строки в исполняемый файл для отладки. Итак, если вы отлаживаете tclsh, то в чем проблема с командой run следующим образом?
run mytest.tcl -opt1 foo -opt2 bar
Например, под Cygwin я могу сделать следующее:
$ 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
Если вы запускаете tclsh в сеансе GDB и устанавливаете аргументы, вы делаете что-то вроде этого ($
это приглашение оболочки, (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 используют подобные методы для передачи аргументов при отладке запуска набора тестов.
Почему не просто запустить
gdb --args tclsh8.5 mytest.tcl -opt1 foo -opt2 bar
когда вам нужно отладить ваше приложение?