免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4397 | 回复: 5
打印 上一主题 下一主题

用于跟踪变量的代码 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-17 22:01 |只看该作者 |倒序浏览
在附件中是我这几天写的一个可以用于跟踪变量的代码.
它的使用方法是在你要跟踪的代码中加入下面的一段


  1.     BEGIN{
  2.         push (@INC,".") ;
  3.         use DebugTie;
  4.         tie(
  5.             $variable_you_watching,
  6.             DebugTie,
  7.             name => "variable_name"
  8.         );
  9.     }
复制代码


上面是你可以跟踪标量,如果是数组

  1. BEGIN{
  2.         push (@INC,".");
  3.         use DebugTie;
  4.         tie(
  5.             @variable_you_watching,
  6.             DebugTie,
  7.             name => "variable_name"
  8.         );
  9.     }
复制代码


HASH表也是相似


  1.     BEGIN{
  2.         push (@INC,".");
  3.         use DebugTie;
  4.         tie(
  5.             %variable_you_watching,
  6.             DebugTie,
  7.             name => "variable_name"
  8.         );
  9.     }
复制代码


其中有代码可以使你动态跟踪,这个可以在命令行中指定.指定的方法是
-ts scalar_variable_name
-th hash_variable_name
-ta array_variable_name



下面是可以使用的代码,在下载的文件中也有
不过在BEGIN中也要加入下面的代码

  1.     BEGIN{
  2.          PREPARSE();
  3.     }
复制代码

  1. sub PREPARSE
  2. {
  3.     use constant HASH_TIE => 1;
  4.     use constant ARRAY_TIE => 2;
  5.     use constant SCALAR_TIE => 3;
  6.     my $i;
  7.     for ($i=0;$i < @ARGV;)
  8.     {
  9.         my $curarg = $ARGV[$i];
  10.         my $setval = 0;
  11.         my @args;
  12.         my $code = undef;
  13.         
  14.         if ($curarg eq "-th")
  15.         {
  16.             $setval = HASH_TIE;
  17.         }
  18.         elsif ($curarg eq "-ta")
  19.         {
  20.             $setval = ARRAY_TIE;
  21.         }
  22.         elsif ($curarg eq "-ts")
  23.         {
  24.             $setval = SCALAR_TIE;
  25.         }

  26.         if ($setval)
  27.         {
  28.             if ( ($i + 1 ) >= @ARGV)
  29.             {
  30.                 die "not good ".$ARGV[$i]."\n";
  31.             }
  32.             $code = "tie (";
  33.             if ($setval == HASH_TIE)
  34.             {
  35.                 $code .="%";
  36.             }
  37.             elsif ($setval == ARRAY_TIE)
  38.             {
  39.                 $code .= "@";
  40.             }
  41.             elsif ($setval == SCALAR_TIE)
  42.             {
  43.                 $code .= "\$";
  44.             }
  45.             $code .= $ARGV[$i+1] ;
  46.             $code .= ",DebugTie,name=>\"";
  47.             $code .= $ARGV[$i+1];
  48.             $code .= "\");";

  49.             eval "$code";
  50.             splice (@ARGV,$i,2);
  51.             
  52.         }
  53.         else
  54.         {
  55.             $i ++;
  56.         }
  57.     }

  58. }
复制代码

DebugTie.rar

2.17 KB, 下载次数: 145

DebugTie.pm

论坛徽章:
0
2 [报告]
发表于 2007-02-17 22:08 |只看该作者
除夕夜,lz辛苦了,回头再看。

论坛徽章:
0
3 [报告]
发表于 2007-11-13 23:26 |只看该作者
没闹明白 是怎么跟踪变量的

作者可否给个例子啊

论坛徽章:
0
4 [报告]
发表于 2007-11-14 09:49 |只看该作者
perl -d 不好用?

论坛徽章:
0
5 [报告]
发表于 2007-11-14 16:25 |只看该作者
牛,你写了个pm.

论坛徽章:
0
6 [报告]
发表于 2008-06-05 17:06 |只看该作者
谢谢楼主,这个是个好东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP