通常我会在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
答案 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
何时需要调试应用程序?