Ich habe das folgende Skript, ~/tmp/2.tcl
:Warum stoppt meine Ablaufverfolgung der TCL-Ausführung nicht bei den Kompilierfunktionen?
proc p1 {a} {
if {[expr $a + 10] > 100} {
puts hi
}
}
set a [p1 200]
Ich habe eine Debug-build TCL v8.6.1, Ich mag zu verfolgen, was in TCL Ausführung vor sich geht, wenn ich „./tclsh8.6 ~/tmp/2.tcl
“ ausgeben, so dass ich gdb
die die Ausführung (in gdb, set args ~/tmp.2.tcl
,) zu verfolgen
Was verwirrte ich bin:
1. In `TclEvalEx`(), it is command by command parsing and execution, I do not see any
script/command compiling.
2. I set breakpoints at `TclAttemptCompileProc(), TclCompileObj()` and `TclCompileExpr`(),
they are not triggered.
Was vermisse ich hier? Warum wird kein Skript kompiliert? Hier
ist der Backtrace des Laufens TclEvalEx:
#0 TclEvalEx (interp=0x613680, script=0x674950 "proc p1 {a} {\n if {[expr $a + 10] > 100} {\n puts hi\n }\n}\n\nset a [p1 200]\n\n", numBytes=87, flags=0, line=1, clNextOuter=0x0,
outerScript=0x674950 "proc p1 {a} {\n if {[expr $a + 10] > 100} {\n puts hi\n }\n}\n\nset a [p1 200]\n\n") at ~/tcl8.6.1/source/generic/tclBasic.c:4935
#1 0x00007ffff7af0812 in Tcl_FSEvalFileEx (interp=0x613680, pathPtr=0x65beb0, encodingName=0x0) at ~/tcl8.6.1/source/generic/tclIOUtil.c:1809
#2 0x00007ffff7afb88f in Tcl_MainEx (argc=-1, argv=0x7fffffffde08, appInitProc=0x400963 <Tcl_AppInit>, interp=0x613680) at ~/tcl8.6.1/source/generic/tclMain.c:417
#3 0x000000000040095c in main (argc=2, argv=0x7fffffffddf8) at ~/tcl8.6.1/source/unix/tclAppInit.c:84
[UPDATE] Ich bin nicht sicher, was schiefgeht, jetzt die Haltepunkte haben ausgelöst werden.
in Klammern, das erste Argument zu 'if' (und' while' und der zweite arg zu 'for') wird bereits als' expr'ession ausgewertet, also 'if {$ a + 10> 100} ... 'ist ausreichend –