如何使用参数在tchsh中执行tcl脚本

时间:2012-08-15 08:13:07

标签: shell tcl tclsh

通常我会在shell下调用我的tcl脚本。

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

如果由于在C ++中实现的某些模块需要启动gdb进行调试。我必须通过gdb启动tclsh。所以问题是如何使用参数在tcl sh中执行我的脚本。

我需要类似的东西:

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

使用exec并不理想,因为它会导致另一个进程并丢失我的断点设置。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果你在gdb会话中运行tclsh并设置参数,你会做这样的事情($是一个shell提示符,(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自己的构建文件使用这样的技术来传递参数。

答案 2 :(得分:0)

为什么不运行

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

何时需要调试应用程序?