[script] 脚本调试

开头
IC中常用的脚本语言有python,perl,makefile,shell等。对于新接手的脚本,若要做一些小修小改,调试的方法除了加打印信息外,最便捷的方式就是单步调试了。
熟悉掌握一个脚本,不外乎两点

1:脚本的运行逻辑

2:脚本的数据结构和变量使用。 使用单步调试可以快速帮助我们熟悉一个复杂的脚本。
之前接触一个7K+行的perl脚本,当你需要关注其中某一个功能时,使用单步调试,可以从开始运行的第一行代码开始,追踪脚本运行这个功能时所走的分支,关注你所需的代码段。可以增加断点,随时的打印变量。
当然很多IDE拥有更加强大的调试功能,例如python的PyCharm。 但是IC公司的linux环境都是无法联网的,甚至有的连python的版本都是2.x的,更别奢求安装丰富的IDE了。
下面介绍下使用脚本内置的方式,不借助IDE的调试方法:

开始之前先看一下C语言的调试。不同语言,调试命令和调试方法大致相同,这里有一个完整的调试流程演示,帮助我们快速熟悉单步调试:🔗C语言入门-第 10 章 gdb 。

C
gcc -g main.c -o main生成包含源码信息的可执行文件main
gdb main进入debug shell
help:查看相关命令


Python
在正常运行的方式上加上 -m pdb , 如 python -m pdb xxx.py -tc xxx
help得到相关命令:

help [cmd]显示命令的具体解释:

常用命令:

命令    解释
b(reak)    设置断点
c(ontinue)    继续执行程序
l(ist)    查看当前行的代码段
s(tep)    进入函数
r(eturn)    执行代码直到从当前函数返回
n(ext)    执行下一行
pp    打印变量的值
a(rgs)    查看全部栈内变量
回车    重复上一条命令
q(uit)    退出
Perl
perl -d xxx.pl -tc xxx使用 -d进入debug模式。
h显示命令:

常用命令:

命令    解释
n    下一步,不可进入子程序
s    单步,可进入子程序
r    s进入子程序之后,按r可退出
p    等同于print
x    输出你要查看的变量的值,x \ %hash查看哈希
l    列出将要执行的代码,
-    列出当前代码前的源代码
c x    告诉调试器运行到第x行后停下来
b x    在指定x行或者子程序处设置断点
w    设置观察点
回车    同n
q    退出
shell
csh -- help

bash -- help
针对于bash,bash -x xxx.bash -tx xxx,-x提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。(cshell使用方式一样)
设置环境变量export PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}:'在每一行前加上文件的行号,方便查看。

Makefile
make -f xxx.mk TC=xxxx -n,-n不实际执行,但把规则和连带规则下的命令打印出来。方便查看Makefile的执行流程。
对于变量的查看,可以创建一个vars.mk

## vars.mk
 %:
     @echo '$*=(*)'
d-%:
     @echo '$*=(*)'
     @echo '  origin = (origin*)'
     @echo '  value = $(value  $*)'
     @echo '  flavor = (flavor*)'
make -f xxx.mk TC=xxx -n -f var.mk d-TC 通过d-TC可以指定查看xxx.mk中的TC变量。

小结
对于Python,Perl,单步调试可以增加断点,随时打印变量。对于Bash, Makefile,不支持单步调试,只可以一次性打印出执行流程。更多功能,需要配合其他debugger工具使用。

对于SystemVerilog,需要Verdi/vde配合仿真工具VCS或者使用irun仿真工具进行单步调试,可以查看函数内的auto局部变量和堆栈结构,参考userguide.
————————————————
版权声明:本文为CSDN博主「Holden_Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Holden_Liu/article/details/115705959

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值