跟踪与调试
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 (
}
click 10
=> 1000 Clicks/Second
1.2 clock seconds 命令
以秒为单位返回当前系统的时间。这个时间通常是从“ epoch”算起。如:
clock seconds
=> 1071708320
1.3 clock format 命令
clock format 命令将整型时间值格式化为一个可读的日期字符串。这个时间值可以是clock seconds、 clock scan 命令,或者是带选项 atime、 mtime 和 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.3, tclsh 等) |
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 返回变量跟踪设置的信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端