IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

perl的调试

扶凯 2009-11-18 23:38:10 累计浏览 2,977 次
本机暂存

perl程序的调试,以前玩php都是print,var_dump(),firebug之类来调试。在perl中,也有很多来方法我们调试的。在我看来调试分二种,一种是功能调试(排错之类保证功能完整).一种是性能调试。

功能调试

1. 最常用的方法

(1. print:这个用户就不用写了吧

(2. 模块: Data::Dumper
这个使用很容易,主要就是使用Dumper的函数做输出

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use Data::Dumper;
 
my $hash = {
        foo => 'test1',
        bar => {
            foo1 => 'test2',
                }
    };
 
print Dumper($hash);

这个会非常非常清楚的输出数据结构的信息:

1
2
3
4
5
6
$VAR1 = {
          'bar' => {
                     'foo1' => 'test2'
                   },
          'foo' => 'test1'
        };

(3 模块:Smart::Comments
这个模块就更加好用了,伟大的CPAN…..这个只需要###加上后面的变量就能输出变量中的信息。你可以在调试时打开,调试完了就关掉。超爽。

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use Smart::Comments;
 
my $hash = {
        foo => 'test1',
        bar => {
            foo1 => 'test2',
                }
    };
 
### hash: $hash

见到上面###后面的内容没,这样很不错吧。。这个更新清楚的打印出数据结构

1
2
3
4
5
6
### hash: {
###         bar => {
###                  foo1 => 'test2'
###                },
###         foo => 'test1'
###       }

(2 perl的调试器

1
perl -d yourperl.pl

   -s      Step 运行一行,跟踪进入子程序
   -n      Next 运行一行
   -r      Return 运行到当前子程序结束
   -p   变量名         查看变量
   -x   变量名         查看变量,友好格式(hash用引用)
   -l/-/w        列出前后的代码
   -c   行号          执行到"行号"
   -c             执行,直到遇到断点
   -b   行号          设置断点(b 子程序名)
   -b   行号 条件       设置条件断点
   -d   行号          去除"行号"处的断点
   -L   列出所有的断点
   -t    跟踪执行

(3 出错信号

这个不在详细写了。在我的另一个文章中,perl中的并发和信号中

性能调试

这个晚点在写困死了,其它下次写

(1. test模块

(2. Devel::Coverage模块

perl -d:Coverage yourperl.pl

这个主要可以测试到代码的覆盖范围。分支的运行情况。

(3. Devel::SmallProf模块

这个模块会生成非常不错的文本文件samllprof.out来显示各行运行的时间,真实时间和cpu时间。它的精度要求好些所以需要Time::HiRes这个模块.
 

1
perl -d:SmallProf yourperl.pl

暂时关闭和打开profile:

1
$DB::profile = 0;

这之间的代码不会被SmallProf跟踪

1
$DB::profile = 1;

指定要跟踪的模块名称,主程序用’main’表示,例如

1
2
3
4
use Data::Dumper;
use TK;
%DB::package = ('main' => 1,
                  'Data::Dumper' => 1);

只跟踪主程序和Data::Dumper的代码执行情况 不列出执行计数为0的行

1
$DB::drop_zeros = 1;

(4. Devel::DProf模块

perl -d:DProf yourperl.pl

1
这个和上面的作者大多相同,但这个会生成自己的格式文件,可以用它来画图之类.

(5 DBI::Profile

测试DBI的,没用过。。。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. perl更新/修改/删除文本文件内容 (累计阅读 10,646)
  2. perl大牛flw传说 (累计阅读 7,712)
  3. AWStats是一个基于Perl的WEB日志分析工具。 (累计阅读 7,172)
  4. perl模块Getopt::Std用法及实例-从命令行读取参数模块 (累计阅读 7,014)
  5. [Perl] Template::Toolkit 模板技术. (累计阅读 6,342)
  6. Perl命令行常见用法及技巧 (累计阅读 5,912)
  7. PHP将死,何以为继? (累计阅读 5,915)
  8. 在perl中连接和使用sqlite做数据存储 (累计阅读 5,807)
  9. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (累计阅读 5,604)
  10. perl的expect使用方法,实现非交互式登录。 (累计阅读 5,482)