簡體   English   中英

如何將調試器與mod_perl結合使用

[英]How do I use the debugger with mod_perl

我正在嘗試將Perl調試器附加到Apache和mod_perl。 我們的環境非常復雜(使用Apache配置了許多其他功能(例如Catalyst)),並且配置它的工程師不再在公司中。 我已經按照Apache網站上的說明進行操作,設置了“ PerlFixupHandler Apache :: DB”等。但是到目前為止,我得到的只是頁面交付進入了調試器。 我猜想我在調度過程中得到了休息,而不是工人過程。 我正在運行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]

我已經成功運行了針對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個月了,所以我記得的差不多。 祝好運....

“ Pro Perl調試”一書中有“調試CGI程序”一章,以及名為“配置mod_perl”的小節。

抱歉,我目前無法使用該書。

多年來,我和公司中的其他幾個人都在嘗試將調試器附加到mod_perl。 在我們實際到達ASP頁面中的代碼之前,我們已經設法在mod_perl流程中打破了幾個環節,但是我們從未能夠突破ASP頁面的內部。 即使我們在運行代碼之前中斷了代碼,然后在有趣的代碼內部將'c'跳轉至$ DB :: single = 1語句,該頁面也會運行至終止並且不會中斷(它似乎跳過了$ DB ::單)。

我們所有人都認為我們的perl版本,perl5db版本或mod_perl版本中存在錯誤,因此對於我們的版本而言,這是不可能的。 我們使用的是perl 5.8.9,以及某些版本的apache 2,此版本目前不在我的視線之內。

我知道這不是答案,但我只是想告訴你這個,這樣,即使最終放棄,也不會為放棄而感到難過。

我在mod_perl中遇到的這個問題是我在網絡服務器和應用程序之間插入Plack層的過程中的主要原因之一。 有了這一抽象層,我可以在開發中運行不同的Web服務器-並且可以在其中附加調試器。 我並沒有過多地建議您這樣做,而只是想知道我真的很願意進行交互式調試。

我認為在mod_perl中進行交互式調試的史詩般的戰斗中,下一個合乎邏輯的步驟將是構建最新版本,看看是否可行。 然后升級我們的perl版本,看看是否可行。

暫無
暫無

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

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