Perlデバッガは、あなたのスーパーパワーでありえます


我々はすべてそこに行ってきた:プログラムの腸の深さは、何かが正しく動作していない理由を把握しようとします.
変数が正しい値を得ていないかもしれません.関数やメソッドが呼び出されたり間違った引数があるかもしれません.多分、私たちは、一連のコードが達しているかどうかさえ知りません.
それで、我々は何をしますか?我々は、我々のコードを捨てますprint ステートメントまたはログ記録.「得た値」呼び出しfoo with x .” 「42番線に達した」
そして、これらの非公式の手掛かりは、ユーザーの生産と目に道を作るように、我々はそれをすべてきれいにすることを確認する必要があります.

より良い方法があります
もし私があなたのプログラムの途中で時間を凍結することができますし、すべてのこれらの詳細を調べる可能性がありますが発生した場合、または彼らが発生する前に言ったか?変数や式が変更され、すぐに原因を参照してくださいにダイブするときに警告することができますか?あなたも、探索的なテストコードを実行することができると“どのような場合”シナリオをプレイ?
このすべてはdebugger , Perlにはbuilt-in . プログラムを実行するperl -d , そして、少しの遅れの後、あなたは新しいコマンドラインプロンプトで示されます:
% perl -d hello.pl

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

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

main::(hello.pl:7): say 'Hello world!';
  DB<1> 
さらに進む前に、デバッガを終了する方法を知りたいかもしれません.ジャストタイプq そして、Enterキーを押すと、通常のコマンドラインに戻るでしょう.
Perlもまたgood (if incomplete) tutorial on using the debugger , そして、私はあなたがあなた自身を慣らすためにそれを通して働くことを提案します.ヘルプ、リスト、ビューの変数とコードの行、ブレークポイントを設定し、行単位で行を取得する方法を説明します.
それから、full manual , どこでどのように物事を学ぶことができますgetting a stack backtrace 現在の行までのすべての呼び出しのうち.

デバッグトリック
デバッガとの私の好きなことはテストスクリプトに対してprove コマンド.これはprove ’の能力run an arbitrary interpreter そのテストハーネスを通して.次のように実行します.
% prove --verbose --lib --exec 'perl -Ilib -d' t/foo.t
…とテストスクリプトをステップ実行することができますt/foo.t , から必要なモジュールをロードするlib ディレクトリは、途中で冗長なテスト出力を得る.
これは非常にモジュールのようなときにペアのように役立つTest::Mojo , Mojolicious Webアプリケーションクラスを読み込み、独自のユーザーエージェントを使用して実行できます.(他の人と同様のことができるPSGI アプリケーションPlack::Test .)

警告
デバッグして、アプリケーションを厳密にテストしているなら、Test::WWW::Mechanize , デバッガを実行すると、クライアント側でサーバーサイドの実行をステップ実行できません.これは特に、PGIプロトコルを使用しないレガシーアプリケーションの間で一般的です.あなたが使っているならばApache mod_perl 見るApache::DB , これでApacheを実行できますhttpd 対話型デバッガによるWebサーバ

それで、あなたのスーパーパワーは何ですか?
デバッガは多くの言語と開発環境の共通の特徴であり、Perlは何十年もの間、1つを持ちました.しかし、私は常に多くの開発者が知っていないか、または“”を介してカットすることができますこの強力なツールを使用しないことに驚いているprint s/実行/停止/追加print S/走れ.
Perlデバッガをどのようにプログラミングワークフローに統合できますか?コメントで私にメッセージを残して、知らせてください.