2

通常我会像这样在 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
4

3 回答 3

3

我认为以下内容应该适合您:

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

因此,设置 argv 和 argc 以获取正确的参数,然后只需在 Tcl 代码中执行源代码即可。

或者, gdb run 命令允许您将命令行参数传递给要调试的可执行文件。所以如果你调试 tclsh 那么运行命令有什么问题如下?

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
于 2012-08-15T09:30:07.900 回答
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 自己的构建文件使用这样的技术在调试测试套件的运行时传递参数。

于 2012-08-15T14:33:37.147 回答
0

为什么不直接跑

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

何时需要调试应用程序?

于 2012-08-15T12:32:35.897 回答