trace.test

来自「tcl是工具命令语言」· TEST 代码 · 共 2,078 行 · 第 1/5 页

TEST
2,078
字号
    set info {}    trace add execution foo leave [list traceDelete foo]    foo 1    list $info [catch {trace info execution foo} res] $res} {{{foo 1} 0 1 leave} 1 {unknown command "foo"}}proc foo {a} {    set b $a}test trace-25.3 {delete command during enter then leave trace} {    set info {}    trace add execution foo enter [list traceDelete foo]    trace add execution foo leave [list traceDelete foo]    catch {foo 1} err    list $err $info [catch {trace info execution foo} res] $res} {{invalid command name "foo"} {{foo 1} enter} 1 {unknown command "foo"}}proc foo {a} {    set b $a}proc traceExecute2 {args} {    global info    lappend info $args}# This shows the peculiar consequences of having two traces# at the same time: as well as tracing the procedure you wanttest trace-25.4 {order dependencies of two enter traces} {    set info {}    trace add execution foo enter [list traceExecute traceExecute]    trace add execution foo enter [list traceExecute2 traceExecute2]    catch {foo 1} err    trace remove execution foo enter [list traceExecute traceExecute]    trace remove execution foo enter [list traceExecute2 traceExecute2]    join [list $err [join $info \n] [trace info execution foo]] "\n"} {1traceExecute2 {foo 1} entertraceExecute {foo 1} enter}test trace-25.5 {order dependencies of two step traces} {    set info {}    trace add execution foo enterstep [list traceExecute traceExecute]    trace add execution foo enterstep [list traceExecute2 traceExecute2]    catch {foo 1} err    trace remove execution foo enterstep [list traceExecute traceExecute]    trace remove execution foo enterstep [list traceExecute2 traceExecute2]    join [list $err [join $info \n] [trace info execution foo]] "\n"} {1traceExecute2 {set b 1} entersteptraceExecute {set b 1} enterstep}# We don't want the result string (5th argument), or the results# will get unmanageable.proc tracePostExecute {args} {    global info    lappend info [concat [lrange $args 0 2] [lindex $args 4]]}proc tracePostExecute2 {args} {    global info    lappend info [concat [lrange $args 0 2] [lindex $args 4]]}test trace-25.6 {order dependencies of two leave traces} {    set info {}    trace add execution foo leave [list tracePostExecute tracePostExecute]    trace add execution foo leave [list tracePostExecute2 tracePostExecute2]    catch {foo 1} err    trace remove execution foo leave [list tracePostExecute tracePostExecute]    trace remove execution foo leave [list tracePostExecute2 tracePostExecute2]    join [list $err [join $info \n] [trace info execution foo]] "\n"} {1tracePostExecute {foo 1} 0 leavetracePostExecute2 {foo 1} 0 leave}test trace-25.7 {order dependencies of two leavestep traces} {    set info {}    trace add execution foo leavestep [list tracePostExecute tracePostExecute]    trace add execution foo leavestep [list tracePostExecute2 tracePostExecute2]    catch {foo 1} err    trace remove execution foo leavestep [list tracePostExecute tracePostExecute]    trace remove execution foo leavestep [list tracePostExecute2 tracePostExecute2]    join [list $err [join $info \n] [trace info execution foo]] "\n"} {1tracePostExecute {set b 1} 0 leavesteptracePostExecute2 {set b 1} 0 leavestep}proc foo {a} {    set b $a}proc traceDelete {cmd args} {    rename $cmd {}    global info    set info $args}test trace-25.8 {delete command during enter leave and enter/leave-step traces} {    set info {}    trace add execution foo enter [list traceDelete foo]    trace add execution foo leave [list traceDelete foo]    trace add execution foo enterstep [list traceDelete foo]    trace add execution foo leavestep [list traceDelete foo]    catch {foo 1} err    list $err $info [catch {trace info execution foo} res] $res} {{invalid command name "foo"} {{foo 1} enter} 1 {unknown command "foo"}}proc foo {a} {    set b $a}test trace-25.9 {delete command during enter leave and leavestep traces} {    set info {}    trace add execution foo enter [list traceDelete foo]    trace add execution foo leave [list traceDelete foo]    trace add execution foo leavestep [list traceDelete foo]    catch {foo 1} err    list $err $info [catch {trace info execution foo} res] $res} {{invalid command name "foo"} {{foo 1} enter} 1 {unknown command "foo"}}proc foo {a} {    set b $a}test trace-25.10 {delete command during leave and leavestep traces} {    set info {}    trace add execution foo leave [list traceDelete foo]    trace add execution foo leavestep [list traceDelete foo]    catch {foo 1} err    list $err $info [catch {trace info execution foo} res] $res} {1 {{set b 1} 0 1 leavestep} 1 {unknown command "foo"}}proc foo {a} {    set b $a}test trace-25.11 {delete command during enter and enterstep traces} {    set info {}    trace add execution foo enter [list traceDelete foo]    trace add execution foo enterstep [list traceDelete foo]    catch {foo 1} err    list $err $info [catch {trace info execution foo} res] $res} {{invalid command name "foo"} {{foo 1} enter} 1 {unknown command "foo"}}test trace-26.1 {trace targetCmd when invoked through an alias} {    proc foo {args} {	set b $args    }    set info {}    trace add execution foo enter [list traceExecute foo]    interp alias {} bar {} foo 1    bar 2    trace remove execution foo enter [list traceExecute foo]    set info} {{foo {foo 1 2} enter}}test trace-26.2 {trace targetCmd when invoked through an alias} {    proc foo {args} {	set b $args    }    set info {}    trace add execution foo enter [list traceExecute foo]    interp create child    interp alias child bar {} foo 1    child eval bar 2    interp delete child    trace remove execution foo enter [list traceExecute foo]    set info} {{foo {foo 1 2} enter}}test trace-27.1 {memory leak in rename trace (604609)} {    catch {rename bar {}}    proc foo {} {error foo}    trace add command foo rename {rename foo "" ;#}    rename foo bar    info commands foo} {}test trace-27.2 {command trace remove nonsense} {    list [catch {trace remove command thisdoesntexist \      {delete rename} bar} res] $res} {1 {unknown command "thisdoesntexist"}}test trace-27.3 {command trace info nonsense} {    list [catch {trace info command thisdoesntexist} res] $res} {1 {unknown command "thisdoesntexist"}}test trace-28.1 {enterstep and leavestep traces with update idletasks (615043)} {    catch {rename foo {}}    proc foo {} {        set a 1        update idletasks        set b 1    }    set info {}    trace add execution foo {enter enterstep leavestep leave} \        [list traceExecute foo]    update    after idle {set a "idle"}    foo    trace remove execution foo {enter enterstep leavestep leave} \        [list traceExecute foo]    rename foo {}    catch {unset a}    join $info "\n"} {foo foo enterfoo {set a 1} enterstepfoo {set a 1} 0 1 leavestepfoo {update idletasks} enterstepfoo {set a idle} enterstepfoo {set a idle} 0 idle leavestepfoo {update idletasks} 0 {} leavestepfoo {set b 1} enterstepfoo {set b 1} 0 1 leavestepfoo foo 0 1 leave}test trace-28.2 {exec traces with 'error'} {    set info {}    set res {}        proc foo {} {	if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}    }    proc bar {} { error "msg" }    lappend res [foo]    trace add execution foo {enter enterstep leave leavestep} \      [list traceExecute foo]    # With the trace active    lappend res [foo]    trace remove execution foo {enter enterstep leave leavestep} \      [list traceExecute foo]        list $res [join $info \n]} {{error error} {foo foo enterfoo {if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}} enterstepfoo {catch bar} enterstepfoo bar enterstepfoo {error msg} enterstepfoo {error msg} 1 msg leavestepfoo bar 1 msg leavestepfoo {catch bar} 0 1 leavestepfoo {return error} enterstepfoo {return error} 2 error leavestepfoo {if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}} 2 error leavestepfoo foo 0 error leave}}test trace-28.3 {exec traces with 'return -code error'} {    set info {}    set res {}        proc foo {} {	if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}    }    proc bar {} { return -code error "msg" }    lappend res [foo]    trace add execution foo {enter enterstep leave leavestep} \      [list traceExecute foo]    # With the trace active    lappend res [foo]    trace remove execution foo {enter enterstep leave leavestep} \      [list traceExecute foo]        list $res [join $info \n]} {{error error} {foo foo enterfoo {if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}} enterstepfoo {catch bar} enterstepfoo bar enterstepfoo {return -code error msg} enterstepfoo {return -code error msg} 2 msg leavestepfoo bar 1 msg leavestepfoo {catch bar} 0 1 leavestepfoo {return error} enterstepfoo {return error} 2 error leavestepfoo {if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}} 2 error leavestepfoo foo 0 error leave}}test trace-28.4 {exec traces in slave with 'return -code error'} {knownBug} {    interp create slave    interp alias slave traceExecute {} traceExecute    set res [interp eval slave {	set info {}	set res {}		proc foo {} {	    if {[catch {bar}]} {		return "error"	    } else {		return "ok"	    }	}		proc bar {} { return -code error "msg" }		lappend res [foo]		trace add execution foo {enter enterstep leave leavestep} \	  [list traceExecute foo]		# With the trace active		lappend res [foo]		trace remove execution foo {enter enterstep leave leavestep} \	  [list traceExecute foo]		list $res [join $info \n]    }]    interp delete slave    set res} {{error error} {foo foo enterfoo {if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}} enterstepfoo {catch bar} enterstepfoo bar enterstepfoo {return -code error msg} enterstepfoo {return -code error msg} 2 msg leavestepfoo bar 1 msg leavestepfoo {catch bar} 0 1 leavestepfoo {return error} enterstepfoo {return error} 2 error leavestepfoo {if {[catch {bar}]} {	    return "error"	} else {	    return "ok"	}} 2 error leavestepfoo foo 0 error leave}}test trace-28.5 {exec traces} {    set info {}    proc foo {args} { set a 1 }    trace add execution foo {enter enterstep leave leavestep} \      [list traceExecute foo]    after idle [list foo test-28.4]    update    # Complicated way of removing traces    set ti [lindex [eval [list trace info execution ::foo]] 0]    if {[llength $ti]} {	eval [concat [list trace remove execution foo] $ti]    }    join $info \n} {foo {foo test-28.4} enterfoo {set a 1} enterstepfoo {set a 1} 0 1 leavestepfoo {foo test-28.4} 0 1 leave}test trace-28.6 {exec traces firing order} {    set info {}    proc enterStep {cmd op} {lappend ::info "enter $cmd/$op"}    proc leaveStep {cmd code result op} {lappend ::info "leave $cmd/$code/$result/$op"}    proc foo x {	set b x=$x	incr x    }    trace add execution foo enterstep enterStep    trace add execution foo leavestep leaveStep    foo 42    rename foo {}    join $info \n} {enter set b x=42/enterstepleave set b x=42/0/x=42/leavestepenter incr x/enterstepleave incr x/0/43/leavestep}test trace-28.7 {exec trace information} {    set info {}    proc foo x { incr x }    proc bar {args} {}    trace add execution foo {enter leave en

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?