8

Perl デバッガーを Apache と mod_perl に接続しようとしています。私たちの環境は非常に複雑で (Apache で構成された多くの追加要素 (Catalyst など))、それを構成したエンジニアはもう会社にいません。「PerlFixupHandler Apache::DB」を設定するなど、Apache Web サイトの指示に従いましたが、これまでのところ 、ページが配信された後にデバッガーを中断するだけです。ワーカープロセスではなく、ディスパッチプロセスで中断が発生したと思います。Apache の prefork MPM バージョンを実行しています。デバッグの手順では、httpd の起動時に -X パラメータを渡すと書かれています。しかし、私が実行している httpd は -X パラメーターを受け入れません。-X パラメータが実際に httpd の一部のバージョンをフォークしない原因になると思いますか?

すべてのガイダンスに感謝します。

$ ./httpd -v
Server version: Apache/2.2.17 (Unix)
Server built:   Nov 16 2010 20:13:24

-X isn't listed when I do httpd -?    
Usage: ./httpd [-D name] [-d directory] [-f file]
           [-C "directive"] [-c "directive"]
           [-k start|restart|graceful|graceful-stop|stop]
           [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S]
4

3 に答える 3

2

「Pro Perl Debugging」という本には、「CGI プログラムのデバッグ」に関する章と、「mod_perl の構成」というタイトルのサブセクションがあります。

申し訳ありませんが、現在その書籍にアクセスできません。

于 2011-06-14T08:07:40.243 に答える
2

eclipse 用の epic perl モジュールに付属のデバッガーと komodo デバッガーを正常に実行しました。

Komodo の場合、次のようなものを apache2.conf に追加します。

<IfDefine DEBUG>
<Perl>
  use ModPerl::Registry;
  use lib qw(/usr/local/lib/perl/Komodo-PerlRemoteDebugging-6.0.3-59641-linux-x86);
  $ENV{PERLDB_OPTS} = "RemotePort=127.0.0.1:9000 LogFile=stderr";
  $ENV{DBGP_IDEKEY} = "yourkey";
  use Apache::DB ();
  Apache::DB->init;
</Perl>
</IfDefine>

ここの指示に従ってください: http://docs.activestate.com/komodo/4.4/debugperl.html

エピックの場合

<IfDefine DEBUG>
    PerlModule ModPerl::Registry
    PerlSetEnv PERLDB_OPTS "RemotePort=192.168.x.x:9500 DumpReused ReadLine=0 PrintRet=0"
    PerlSetEnv PERL5DB "BEGIN { $DB::CreateTTY=0; require /path_to_epic_db_scripts/perl5db.pl'; }"
    PerlRequire /path_to_epic_db_scripts/db.pl
    PerlPostConfigRequire /etc/apache2/perl/whatever.pl
</IfDefine>

こちらのドキュメントを参照してください: http://www.epic-ide.org/guide/ch06.php

もちろん、Epic は無料ですが、Komodo は無料ではありません。使用するように電話してから約 18 か月が経過していると言わざるを得ないので、覚えている限りです。幸運を....

于 2013-01-16T20:06:33.387 に答える
0

私と私の会社の他の何人かは、何年もの間 mod_perl にデバッガーを接続しようとしてきました。実際に ASP ページのコードに到達する前に、mod_perl プロセスのいくつかのポイントで中断することができましたが、ASP ページ内で中断することはできませんでした。コードが実行される前に中断し、興味深いコード内の $DB::single = 1 ステートメントに 'c' しても、ページは終了するまで実行され、中断しません ($DB をスキップするように見えます)。 ::独身)。

私たち全員が、私たちのバージョンの perl、私たちのバージョンの perl5db、または私たちのバージョンの mod_perl にバグがあると信じています。私たちはperl 5.8.9を使用しており、現時点で私を逃れるApache 2のいくつかのバージョンです。

これが答えではないことはわかっていますが、最終的にあきらめた場合にあきらめることを後悔しないように、これを伝えたかっただけです.

mod_perl で発生しているこの問題は、Web サーバーとアプリケーションの間にPlackレイヤーを挿入しようとしている主な理由の 1 つです。この抽象化レイヤーを使用すると、開発中に別の Web サーバーを実行でき、デバッガーをアタッチできる Web サーバーを実行できます。私はこれにリンクしているわけではありませんが、私がインタラクティブなデバッグを真剣 に考えていることを知ってもらうために、あなたがそうするように提案しています。

mod_perl でのインタラクティブなデバッグをめぐる壮大な戦いの次の論理的なステップは、最新バージョンをビルドして、それが機能するかどうかを確認することだと思います。次に、perl のバージョンをアップグレードして、それが機能するかどうかを確認します。

于 2012-04-25T10:45:17.457 に答える