You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Tcl的trace命令获取被跟踪过程的完整调用父级链?

获取Tcl过程调用完整调用链解决方案

以下是修改后的完整代码,可在跟踪::C过程时输出目标格式的完整调用链:

proc A {} {B ; return 1}
proc B {} {C ; return 1}
proc C {} {return 1}

proc track {args} {
    set call_chain [list]
    set current_level -2
    while {1} {
        # 遍历上层栈帧,直到触及栈顶
        if {[catch {info frame $current_level} frame_list]} {
            break
        }
        # 将帧信息转为字典,方便提取字段
        set frame_dict [dict create {*}$frame_list]
        # 仅处理过程调用类型的栈帧
        if {[dict get $frame_dict type] eq "proc"} {
            lappend call_chain "[dict get $frame_dict proc] call"
        }
        incr current_level -1
    }
    # 反转列表调整调用顺序,添加被跟踪的::C
    set call_chain [lreverse $call_chain]
    lappend call_chain "::C"
    # 输出目标格式的调用链
    puts [join $call_chain " > "]
}

# 跟踪::C过程的leave事件
trace add execution C leave track
# 触发调用链
A

代码说明

  • 从-2层级开始遍历栈帧,跳过track自身的栈帧
  • 将info frame返回的键值对列表转为字典,精准提取过程名称
  • 反转收集到的栈帧列表,把调用顺序调整为从外层到内层
  • 拼接成目标格式的调用链并输出

内容的提问来源于stack exchange,提问作者Mkn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:28:31