2013-04-27 54 views
2

請看下面的例子不匹配的行號:TCL:信息幀給出了信息主體

$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,其是合理的。
但它是通過返回的字符串的第4行info body(因爲\被刪除,3號線和4號線連接在一起。)
是否有可能使info frameinfo body之間是一致的行號?

+0

哦,你發現'信息frame' !這很奇怪(而且從T-I-Tcl系統的角度來看,非常痛苦;跟蹤精度級別的行數出奇地困難)。 – 2013-04-28 18:14:43

回答

0

info frame命令顯然很奇怪;它會嘗試從源代碼所在的位置返回行號。如果將代碼放入文件中,line字段將爲該文件中的行號(將在file字段中命名,該字段在代碼爲source d時出現)。下面是一個示例從終端會話切正貼,顯示了真正的價值:

 
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跟蹤消息這個信息,我們去了很多工作來構建它,然後幾乎用它做什麼...)

+0

我試圖用trace/info body/info框架開發一個微小的調試工具。我需要知道腳本運行到哪一行(並在用戶類型'contiue'或'step'之前停下來)。用戶可能不會使用source命令來運行他的腳本,所以信息框可能會返回'proc'類型而不是'source'。 – jerrylipeng 2013-04-30 09:53:51