如何从命令';信息框';在tcl中,类型是proc还是eval?

如何从命令';信息框';在tcl中,类型是proc还是eval?,tcl,Tcl,根据Tcl手册,通过执行命令“info frame”获得的一些信息是: 行:: 此条目提供命令所在脚本内部的行号。对于预编译类型,此信息不存在对于类型源,此信息相对于文件开头计数,而对于最后两种类型,行相对于脚本开头计数。 档案:: 此条目仅适用于类型源。它提供命令所在文件的规范化路径 这表明,如果type不是source,则无法获得文件名和确切的行号,但我需要准确访问这两个。这里有人能帮我吗?如果Tcl有脚本所在文件的信息(如文件中所报告的和行键由信息框返回的中所述)那你就知道它从哪里来了。如

根据Tcl手册,通过执行命令“info frame”获得的一些信息是:

行:: 此条目提供命令所在脚本内部的行号。对于预编译类型,此信息不存在对于类型源,此信息相对于文件开头计数,而对于最后两种类型,行相对于脚本开头计数。 档案:: 此条目仅适用于类型源。它提供命令所在文件的规范化路径


这表明,如果type不是source,则无法获得文件名和确切的行号,但我需要准确访问这两个。这里有人能帮我吗?

如果Tcl有脚本所在文件的信息(如
文件中所报告的
键由
信息框返回的
中所述)那你就知道它从哪里来了。如果Tcl缺少这些信息——这可能是因为一系列原因,比如代码是自动生成的,或者您正在进行特别“聪明”的代码生成——那么它真的无法告诉您。遗憾的是,脚本出处跟踪机制相当脆弱,因为它依赖于在指针级别跟踪对字符串文本的精确引用来工作;当它迷失方向时,它就无法解决问题。(而且,它没有在错误报告中使用它所拥有的信息。这对我来说太令人沮丧了,否则它将是唯一最重要的用例!)


因为你不可能在所有情况下都得到完美的跟踪,这将是一个更多的情况,看看是否有可能使事情在你的实际情况下工作;这通常比你看起来害怕的要多。诀窍是在您实际获得信息的位置捕获信息,然后适当地使用它。这并不是难以置信的困难,但在Tcl中,做好这项工作是代码生成中比较复杂的部分之一(当然,除非您将所有内容都写入到一个文件中,并且不必费心跟踪其他内容).

谢谢你的回复,先生。但我仍在努力寻找解决方案。我给你一个我正在处理的代码示例及其o/p。任何线索都将是可观的代码:proc stacktrace{set level[info frame];ince level-2;如果{$level>1}{echo错误发生在;而{$level}{set Error\u info[info frame$level];将“$error_info”放入级别-1;}}}}}结果:类型proc line 3 cmd{method1}proc::procA level 1类型eval line 1 cmd{procA 0{.}级别2可以使用除info frame或info level以外的任何命令来实现此功能吗?这看起来是一个非常基本的功能,我不敢相信在tcl中是不可用的。唯一包含此信息的命令是
info frame
。看起来您的代码也在做一些棘手的事情:我从
stackframe
获得输出,如下所示:
键入源代码行18 file/tmp/stackframeexample.tcl cmd{grill$q$r$p}proc::bar level 2
,这对我来说似乎很好…先生,按照“interp debug path?-frame?bool???”应该做这项工作,但它对我来说仍然不起作用。我正在使用语法“interp debug{}-frame 1”.我做的有什么不对吗?请帮帮我,先生。