trace用法深入挖掘

2017-07-12 刘奥龙 & 薛原 爬虫俱乐部 爬虫俱乐部

我们在上一篇推文《set trace on—追踪你的程序》中介绍了通过set trace on的主要功能,即找出程序中的错误并调试Stata程序。此外,通过help trace查看help文件,我们发现trace还有更为灵活的用法,今天这篇推文,我们就来对trace的用法进行深入挖掘。



1

tracedepth

我们可以通过set tracedepth来设置我们在追踪嵌套程序时所追踪的层数。例如我们定义一个小程序:regprice,这个程序能够调用auto数据,并且做一个简单的回归。

program define regprice

       sysuse auto

       reg price mpg length

end

现在我们直接运行regprice

regprice

直接就显示了程序运行的结果。如果我们使用set trace on命令,并且通过set tracedepth 1设置追踪1层,显示结果如下:

set tracedepth 1

set trace on

regprice

这个时候Stata不仅显示了运行结果,而且告诉我们这一条命令先执行了sysuse auto这一条命令,又执行了reg price mpg length。如果我们改成set tracedepth 2,就可以看到sysuse和reg这两个命令中执行的程序。

set tracedepth 2

set trace on

regprice

值得注意的是,Tracedepth默认值为32000,根据help文件中的说法,实际上就是无限大,即能看到每一层的执行情况。

2

tracenumber

我们可以通过set tracenumber on来查看追踪的程序嵌套的层级,默认下tracenumber是off的。比如刚才的程序,如果我们加上set tracenumber on的话,就会显示如下的内容:

set tracedepth 2

set tracenumber on

set trace on

regprice

Regprice这一条主程序是作为第一层,我们设置了tracedepth为2,所以可以为我们追踪到第2层和第3层,即前面标注的02和03。

3

tracesep

我们可以通过set tracesep来设置是否显示每一层之间的水平分割线,默认情况下这些分割线是显示的,我们可以通过set tracesep off来让这些分割线不显示。

set tracedepth 1

set tracenumber on

set tracesep off

set trace on

regprice

可以看到,加上set tracesep off这一条命令后,每一层之间的分割线就消失了。

4

traceindent

通过以上这些程序的运行结果我们可以发现,每一行前面都有缩进,通过缩进我们也可以看出是哪一层的程序。如果我们不想让显示的结果出现缩进,运行set traceindent off命令即可。这个时候,我们就只能通过前面的序号来判断是哪一层的程序了。

5

tracehilite

如果我们想要从大量程序的运行结果中找到某一个关键词,这个时候就需要用到set tracehilite。比如我们想要从执行的结果中找到reg,只需要运行如下程序:

set tracedepth 2

set tracenumber on

set tracesep off

set traceindent off

set tracehilite reg

set trace on

regprice

可以看到,reg变成了不同于其他显示结果的白色字符。

6

traceexpand

我们可以通过set traceexpand命令来设置是否显示包含宏命令中宏的内容。traceexpand的默认设置是on,我们使用如下例子来演示:

set trace on

forvalues i = 1/2 {

       disp `i'

}

可以看到,每一次执行disp `i'这一行命令时都会告诉我们这一行命令实际的意思,第一次执行是就是disp 1,第二次就是disp 2。如果我们将traceexpand关闭,则会变成这样:

set trace on

set traceexpand off

forvalues i = 1/2 {

       disp `i'

}

    这时候报告的结果就不会告诉我们每一次disp `i'究竟是什么了。



以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                     文字编辑:司海涛

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.关于RTF你不知道的命令之番外篇

4.免费事件研究,一片片从邮局寄来

5.免费的股价同步性,一片片从邮局寄来

6.Stata叫你回家听音乐了!

7.一言不合就用stata写邮件(Outlook/Foxmail)

8.听说你想知道怎么用stata画地图?

9.I have a Stata, I have a python

10.I have a Stata, I have a Python之二——pdf转word




关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部 


微信扫一扫
关注该公众号