请参阅以下示例:
$tclsh
% proc test {} {
puts "line 2: [info frame 0]"
# line 3 \
line 4
puts "line 5: [info frame 0]"
}
% test
line 2: type proc line 2 cmd {info frame 0} proc ::test level 0
line 5: type proc line 5 cmd {info frame 0} proc ::test level 0
% info body test
puts "line 2: [info frame 0]"
# line 3 line 4
puts "line 5: [info frame 0]"
第二个info frame
给出第5行是合理的
但它位于info body
返回的字符串的第4行(因为\
被删除,第3行和第4行连接在一起。)
是否可以使info frame
和info body
之间的行号保持一致?
答案 0 :(得分:0)
info frame
命令显然很奇怪;它尝试从代码生成的地方返回行号。如果您将代码放在一个文件中,line
字段将是该文件中的行号 (将在file
字段中命名,该字段在代码中出现是source
d)。这是来自终端会话的示例cut-n-paste,显示真实值:
bash$ cat test_frame.tcl package require Tcl 8.5 proc test {} { puts "line 2: [info frame 0]" # line 3 \ line 4 puts "line 5: [info frame 0]" } test bash$ tclsh test_frame.tcl line 2: type source line 3 file /home/dkf/test_frame.tcl cmd {info frame 0} proc ::test level 0 line 5: type source line 6 file /home/dkf/test_frame.tcl cmd {info frame 0} proc ::test level 0
现在我知道这是令人恼火的,你不能将行号与info body
结果同步,但获取文件行号(好吧,可能)更有用。
(尽管如此,我希望我们在errorInfo
跟踪消息中使用此信息;我们需要进行大量工作来构建它,然后几乎不做任何事情......)