簡體   English   中英

如何調試 Perl 腳本?

[英]How can I debug a Perl script?

當我運行 Perl 腳本時,如何調試它? 例如,在 ksh 中我添加了-x標志。 但是我如何在 Perl 中做同樣的事情呢?

perl -d your_script.pl args

這就是調試 Perl 的方式。 它使您進入交互式gdb風格的命令行調試器。

要在 Perl 調試器下運行您的腳本,您應該使用-d開關:

perl -d script.pl

但是 Perl 是靈活的。 它提供了一些鈎子,你可以強制調試器按照你的意願工作

所以要使用不同的調試器,你可以這樣做:

perl -d:DebugHooks::Terminal script.pl
# OR
perl -d:Trepan script.pl

在這里這里查看這些模塊。

有幾個最有趣的 Perl 模塊掛接到 Perl 調試器內部: Devel::NYTProfDevel::Cover

還有很多其他的。

如果您可以使用交互式調試器,您可以嘗試perldebug

我還建議使用Perl 調試器

但是,由於您詢問了 shell 的-x之類的問題,請查看Devel::Trace模塊,它執行類似的操作。

EclipseEPIC一起使用:它為您提供了一個具有調試可能性的不錯的 IDE,包括放置斷點的能力和用於檢查變量值的Perl Expression View

如果你想做遠程調試(對於 CGI 或者如果你不想用調試命令行弄亂輸出),使用這個:

給定測試:

use v5.14;
say 1;
say 2;
say 3;

在終端 1 上的任何主機和端口上啟動偵聽器(此處為localhost:12345 ):

$ nc -v -l localhost -p 12345

對於 readline 支持,請使用rlwrap (您也可以在perl -d上使用):

$ rlwrap nc -v -l localhost -p 12345

並在另一個終端(比如終端 2)上開始測試:

$ PERLDB_OPTS="RemotePort=localhost:12345" perl -d test

端子 1 上的輸入/輸出:

Connection from 127.0.0.1:42994

Loading DB routines from perl5db.pl version 1.49
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(test:2):    say 1;
  DB<1> n
main::(test:3):    say 2;
  DB<1> select $DB::OUT

  DB<2> n
2
main::(test:4):    say 3;
  DB<2> n
3
Debugged program terminated.  Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
  DB<2>

終端 2 上的輸出:

1

如果要在調試終端上輸出,請注意這句話

select $DB::OUT

如果您是 Vim 用戶,請安裝此插件: dbg.vim ,它為 Perl 提供基本支持。

最有效的調試工具仍然是仔細思考,加上明智地放置打印語句。

Brian Kernighan,“初學者的 Unix”(1979 年)

(並使用Data::Dumper增強打印語句)

請注意, Perldebugger也可以從 scripts shebang 行調用,這就是我主要使用您引用的-x標志來調試 shell 腳本的方式。

#! /usr/bin/perl -d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM