Chinaunix

标题: 用于跟踪变量的代码 [打印本页]

作者: jeppeter    时间: 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


作者: 福瑞哈哥    时间: 2007-02-17 22:08
除夕夜,lz辛苦了,回头再看。
作者: hongyunqi    时间: 2007-11-13 23:26
没闹明白 是怎么跟踪变量的

作者可否给个例子啊
作者: KevinLee39    时间: 2007-11-14 09:49
perl -d 不好用?
作者: hqyus    时间: 2007-11-14 16:25
牛,你写了个pm.
作者: robustkele    时间: 2008-06-05 17:06
谢谢楼主,这个是个好东西




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2