3

私は初めてでPerl、次の問題があります。
ログ出力があり、このログ出力の出所がわかりました。それを印刷するモジュールのサブルーチンを意味します。

今、例では、例や他のユーティリティを使用Javaして、メソッドを呼び出す方法/時期/人を確認し、必要なものを再現してデバッグする方法を見つけます。 EclipseCall hierarchy

でこれを行うにはどうすればよいPerlですか? 例えば経由grep?たとえば、モジュール名の場合、などgrepの範囲の何百もの行が表示されます。 さらに、関心のあるルーチンが直接呼び出されていない可能性があるのではないかと心配していますが、スクリプトなどによって、関心のあるモジュールが実行されます。 (私の無知のために)あいまいです。 use A require A C::B::A B::A C::B::A::some_routine C::B::A::some_other_routine
Perl

Perlでは、最も効率的な方法で何かをデバッグするにはどうすればよいでしょうか? あなたPerlの教祖は、私がより効率的になるために何を提案しますか?

4

3 に答える 3

5

Perl デバッガーでプログラムを実行します。

perl -d scriptname arguments...

関心のある関数にブレークポイントを設定し、プログラムがブレークポイントで停止したら、Tデバッガー コマンドを使用してスタック トレースを表示します。これにより、関数が呼び出された場所が示されます。

あなたのコメントから、これが実際にあなたが探しているものに対処しているかどうかはわかりません. もしかしたら、Perl アプリケーションの相互参照が必要ですか? FAQ を参照してくださいPerl プログラムを相互参照するにはどうすればよいですか?

于 2013-05-25T19:06:28.953 に答える
4

ほとんどの場合、(いくつかのデバッグ情報と共に) スタック トレースを取得することから始めることをお勧めします。標準のCarpモジュールを使用してスタック トレースを生成できます。

use Carp;  
print_to_log(Carp::longmess("We're here"));

または、そのためのオブジェクト指向モジュールもあります。

于 2013-05-25T20:15:33.590 に答える