如果类型是proc或eval,如何从tcl命令'info frame'获取确切的行号和文件名?

时间:2017-01-19 08:02:04

标签: tcl

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

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

这表明如果类型不是源代码,则无法获取文件名和确切的行号,但我需要准确访问这两个。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

如果Tcl有关于脚本所在文件的信息(如file返回的lineinfo frame键中所述),那么您就知道它来自何处。如果Tcl缺少信息 - 这可能有很多原因,例如代码是自动生成的,或者你是否正在做特别“聪明”的代码生成 - 那么真的可以&# 39;告诉你。不幸的是,脚本起源跟踪机制相当脆弱,因为它依赖于跟踪指针级别的字符串文字的精确引用来工作;当它失去了轨道时,它无法解决问题。 (此外,它没有使用它在错误报告中的信息。这对我来说是非常令人沮丧的,否则它将是唯一最重要的用例!)

由于您无法在所有情况下都能获得完美的跟踪功能,因此您可以更好地了解是否可以在实际案例中使其工作正常;这通常比你似乎更害怕。诀窍是在您实际上正常获取信息的位置捕获信息,并在此之后适当地使用它。这并不难,但是做得很好是Tcl代码生成中比较复杂的部分(除非你把所有内容都写到文件中,当然不要在跟踪之外进行跟踪)。