Вопрос: Как использовать отладчик с mod_perl


Я пытаюсь подключить отладчик Perl к Apache и mod_perl. наш среда довольно сложная (много дополнительных материалов (например, Catalyst) настроенный с помощью Apache), а инженеры, которые его настроили, не дольше с компанией. Я следил за инструкциями на Apache веб-сайт, установка «PerlFixupHandler Apache :: DB» и т. д. но пока все, что я получаю, это перерыв в отладчик после страница была доставлена. Я предполагаю, что я получаю перерыв в процесс отправки, а не рабочий процесс. Я запускаю prefork MPM версии Apache. Инструкции по отладке передают параметр -X, когда начало httpd. Но 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]

7


источник


Ответы:


Книга 'Pro Perl Debugging'  есть глава «Отладка программы CGI» и подразделение «Настройка mod_perl».

К сожалению, у меня нет доступа к книге прямо сейчас.


1



Я успешно запускаю отладчик, который поставляется с эпическим модулем perl для eclipse, а также отладчиком 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 месяцев с тех пор, как я позвонил, чтобы использовать его, так что это примерно столько, сколько я помню. Удачи....


1



Я и некоторые другие в моей компании уже несколько лет пытаются подключить отладчик mod_perl. Нам удалось разбить несколько моментов в процессе mod_perl, прежде чем мы действительно достигли кода на наших страницах ASP, но нам никогда не удавалось проникнуть внутрь наших ASP-страниц. Даже если мы разорвемся до того, как наш код будет запущен, а затем «c» в наш оператор $ DB :: single = 1 внутри нашего интересного кода, страница запустится до завершения и не сломается (похоже, она пропускает $ DB ::Один).

Все мы считаем, что в нашей версии perl, нашей версии perl5db или нашей версии mod_perl есть ошибка, из-за чего это невозможно сделать для нашей версии. Мы находимся на perl 5.8.9, и некоторая версия apache 2, которая ускользает от меня в данный момент.

Я знаю, что это не ответ, но я просто хотел рассказать вам об этом, чтобы вы не чувствовали себя плохо, если бы отказались, если в конце концов перестанете сдаваться.

Эта проблема, с которой мы сталкиваемся с mod_perl, является одной из основных причин, по которым я вхожу в процесс вставки Plack  слоя между нашим веб-сервером и нашим приложением. С помощью этого уровня абстракции я могу запустить другой веб-сервер в разработке - и тот, в котором я могу подключить отладчик. Я не связываюсь с этим так же, как предложение, что вы это делаете, но просто для того, чтобы вы знали, что я действительно  серьезная проблема с интерактивной отладкой.

Я думаю, что следующим логическим шагом в эпической битве за интерактивную отладку в mod_perl было бы создание последней версии и посмотреть, работает ли это. Затем обновите нашу версию perl и посмотрите, работает ли это.


0