TCL技巧:一个超级实用的Debug方法

本文提供了一种在TCL中高效定位层级调用错误的方法,通过重新定义`source`命令,实现自动附加`-e -v`选项,以便在执行多层次sdc或flow脚本时,轻松找出错误源。

速读摘要:

本文介绍一个在层级调用比较复杂的环境中,迅速定位错误位置的方法

执笔/白山头

经常在解决问题的过程中,会有一些自我感觉还不错的方法。

我希望能够把这些方法共享出来,起到抛砖引玉的作用。

 

废话不多说,直接进入正文。


在hierarchial sdc或者flow 脚本中,会调用很多不同的文件。tcl中调用文件用的是source 这个命令。

 

调用一次两次还好。如果调用多次,尤其层级较多的时候,就会非常麻烦。

 

设想这样一个比较常见的场景。

 

你拿到了顶层的sdc。source了一遍发现有error。但是不知道哪一行有问题。

那么你在source的时候用source -v -e就可以了。

然而,你发现,有error的那一行竟然是source了另外一个文件。

于是,你把那一行改成了source -e -v,然后再重新执行这个命令。

然后你发现了另外一个文件有error的位置竟然还是一个source。于是你想改一下那个文件,然而发现,permission denied

通常,层级超过3级就开始影响心情了。

这种方式最直接,但是效率低下,属于重复劳动。

这时候我们就需要一种更好的方式了。

我在此介绍一个超级简单的方法,就是重新定义source的行为方式。

首先,对原生的source 进行更名

rename source __source

然后重新定义一个名字为source的proc:

proc source {args} {
     __source -e -v $args
 }

这样就重新定义了source命令,当运行source命令时,等效于运行source -e -v。

这样,你在source这个hierarchical sdc的时候,等效于里面所有层级的source命令,均被替换为了source -e -v。

当然,如果原来用的source 已经带了-echo或者-verbose的选项,那么就相当于用了重复的选项(option),不过在这里选项的重复是没有问题的。

如果想一次性将所有潜在的error都报出来。可以把这个命令改为:

proc source {args} {
     __source -e -v -continue_on_error $args
 }

我们也可以增加一些debug的信息,方便定位所在文件名称:

proc source {args} { 
    echo "starting execute \"source $args\""
__source -e -v -continue_on_error $args
    echo "finishing execute \"source $args\"
}

然后通过log,我们就可以迅速定位所有error的所在文件,以及具体行。

结语:

有时,我们可以通过修改tcl原生命令的方式,通过少量的修改,使得flow进入到所谓的debug模式,增加必要信息的输出,迅速找出问题的所在。

往期精彩回顾:

 如何更优雅的报出cell的总面积

 为什么异步时钟不要设false path

“谢谢对老山头的支持”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值