跟踪与调试

1. clock 命令

1.1 clock clicks 命令 

clock clicks 返回高分辨率系统时钟计数器值,一般仅用于测量经过的时长。 click 分辨率取决于系统本身。如果使用了-milliseconds 选项,则分辨率以毫秒为粒度。

计算系统时钟滴答数示例:

proc click {period} {

  set t1 [clock clicks]

  after [expr $period * 1000]  #wait for $period seconds

  set t2 [clock clicks]

  puts "[expr ($t2 - $t1)/$period] Clicks/Second"

}

click 10

 => 1000 Clicks/Second

1.2 clock seconds 命令 

以秒为单位返回当前系统的时间。这个时间通常是从“ epoch”算起。如: 

clock seconds

 => 1071708320

1.3  clock format 命令 

clock format 命令将整型时间值格式化为一个可读的日期字符串。这个时间值可以是clock secondsclock scan 命令,或者是带选项 atimemtime ctime file 命令的返回值。日期字符串的格式可以由-format 后的格式化字符串 string 确定。  如果没有-format 选项,则使用默认格式化字符串"%a %b %d %H:%M:%S %Z %Y" 。

示例:

clock format [clock seconds]

 => Fri Apr 19 16:29:48 CST 2024

clock format [clock seconds] -format \

  "WEEK=%A MONTH=%B DATE=%d TIME=%H:%M:%S in Year%Y"

 => WEEK=Friday MONTH=April DATE=04/19/2024 TIME=16:32:43 in Year2024

消除 clock format 输出中的乱码:

encoding system uft-8   # 将系统编码设置为 UTF-8,输出也为 UTF-8 

encoding system unicode

clock format 的域描述符

域描述符 说明
%% Insert a %.
%a Abbreviated weekday name (Mon, Tue, etc.).
%A Full weekday name (Monday, Tuesday, etc.).
%b Abbreviated month name (Jan, Feb, etc.).
%B Full month name.
%c Locale specific date and time.
%d Day of month (01 - 31).
%I Hour in 12-hour format (00 - 12).
%j Day of year (001 - 366).
%m Month number (01 - 12).
%M Minute (00 - 59).
%p AM/PM indicator.
%S Seconds (00 - 59).
%U Week of year (00 - 52), Sunday is the first day of the week.
%w Weekday number (Sunday = 0).
%W Week of year (00 - 52), Monday is the first day of the week.
%x Locale specific date format.
%X Locale specific time format.
%y Year without century (00 - 99).
%Y Year with century (e.g. 1990)
%Z Time zone name.

1.4 clock scan 命令

clock scan 命令用来解析一个日期字符串并返回对应的时间值(以秒为单位)。此命令可以处理各种格式的日期,如果没有指明年份,则采用当前年份。可以用-base 选项指明基准日期时间。如: 

clock format [clock scan "1 day" -base [clock scan 1999-10-31]]

 => Mon Nov 01 0:00:00 中国标准时间 1999

clock format [clock scan "24 hours" -base [clock scan 1999-10-31]]

 => Mon Nov 01 0:00:00 中国标准时间 1999

2. info命令

info 命令允许 Tcl 程序从 Tcl 解释器获得有关当前解释器状态的信息。比如,通过 info 的子命令可以知道某个过程、变量或者命令是否在当前的解释器中存在,这样你就可以在使用一个变量或者调用一个过程的时候,先测试一下变量或者过程是否存在,从而避免操作不存在的变量、过程或命令而引起的错误。 

示例:

#info 测试变量是否存在 

set a [info exists b]

 => 1  #参数b存在

set a [info exists q]

 => 0  #参数q没定义

info 的命令集见下表:

命令 说明
info args procedure 过程 procedure 的参数名列表
info body procedure 过程 procedure 的(执行命令体的)内容
info cmdcount 已经执行的命令数
info commands ?pattern? 列出所有命令,或与 pattern 匹配的命令。命令包括 Tcl内建命令和过程
info complete command 测试 command 是否是一条完整命令,是则返回真
info default proc arg var 测试过程 proc 的参数 arg 是否有默认值,有则返回 1 并将默认值保存到 var
info exists variable 测试变量 variable 是否存在
info globals ?pattern? 返回所有全局变量或者与 pattern 匹配的全局变量列表
info hostname 返回当前主机名
info level 当前过程调用的层次,全局作用域为 0
info level number 返回指定层次的命令及其参数的列表
info library Tcl 库目录路径名
info loaded ?interp? 加载到解释器 interp 中的库的列表
info locals ?pattern? 返回全部局部变量或与 pattern 匹配的局部变量列表
info nameofexecutable 返回当前程序文件名(如 wish8.3tclsh 等)
info patchlevel Tcl 的补丁级别
info procs ?pattern? 返回所有 Tcl 过程或与 pattern 匹配的过程名列表
info script 正在处理的脚本名,如一个.tcl 文件正在被 source 命令

2.1  info level 

info leval 命令可以控制带有循环嵌套调用过程的循环层次数。 

2.2  info exists 

info exits 命令可以测试一个变量是否存在。在使用一个变量之前,用此命令先检测一下变量是否已经存在,从而避免因为使用了未定义的变量引起的错误。 

3. trace 命令 

trace 命令用于变量操作跟踪,它注册一条命令到一个变量,只要这个变量发生指定的变化,如被读、写或者复位( unset)的时候,注册命令就会被调用来进行相关的处理。 

3.1 trace variable 

语法:

  • trace variable varName operations command 

说明:

  • operations 为变量操作选项,为下列选项的一个或者多个:
    • - r 代表只读

    • - w 代表只写

    • - u 代表复位或 unset 操作

operations 说明当变量发生这些动作时,命令就会被调用。

  • command 为注册命令,它必须能够接收三个参数(当变量发生 operations 中的某一个动作的时候, command 就会执行:command var1 var2 var3
    • var1 代表变量名或者数组名。

    • var2 是数组元素索引,如果跟踪的是普通变量(非数组变量),或者跟踪的数组被设置为复位跟踪且数组已经被复位,则此参数为空。

    • var3 是跟踪的动作,即满足 options 定义的某个选项对应动作。 

3.2 trace vdelete 

trace vdelete 删除用 trace variable 为变量所做的一条注册命令。

语法

  • trace vdelete varName operations command

trace vdelete 的语法和 trace variable 的语法一致。

3.3 trace vinfo  

trace vinfo 返回变量跟踪设置的信息 
 

posted @ 2024-04-19 16:46  小熊酱  阅读(1)  评论(0编辑  收藏  举报