Как выполнить 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

когда вам нужно отладить ваше приложение?

Другие вопросы по тегам