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

вопрос создан в Fri, Apr 8, 2011 12:00 AM

Я пытаюсь подключить отладчик Perl к Apache и mod_perl. наш среда довольно сложная (много дополнительных вещей (например, Catalyst) настроенный с Apache) и инженеры, которые настраивали его, нет дольше с компанией. Я следовал инструкциям на Apache веб-сайт, настройка 'PerlFixupHandler Apache :: DB' и т. д. но пока все, что я получаю, это перерыв в отладчике после страница была доставлена. Я предполагаю, что я получаю перерыв в процесс отправки, а не рабочий процесс. Я использую префорк 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]
    
8
  1. Вы пытались установить точку останова перед запуском apache? (т. е. $DB::single=1) Или попробуйте сбросить таблицу \% DB :: symbol, чтобы увидеть, загружен ли отладчик даже в той части процесса, которая генерирует ответ?
    2011-04-07 19: 57: 35Z
  2. В зависимости от ваших потребностей, вы также можете засорять код строками print eval, "\n" while <>;, которые будут перетаскивать вас в базовый реплик при каждом запуске. Введите необходимые команды, а затем нажмите CTRL-D, чтобы завершить цикл while, и код будет выполняться до тех пор, пока в следующий раз не достигнет «точки останова». В зависимости от того, где вы их разместите, вам может понадобиться обернуть вышеупомянутое в {local $_; ... }, чтобы защитить переменную $_.
    2011-04-07 21: 02: 35Z
  3. Я не верю, когда вы говорите, что -X не принято. Каждый Apache httpd, выпущенный за последние 10 лет или дольше, имеет эту функцию. Вы, должно быть, делаете что-то не так.
    2011-04-07 22: 47: 30Z
  4. Отредактировал основной пост ...
    2011-04-08 18: 05: 29Z
  5. 2019-02-26 10: 29: 57Z
3 ответа                              3                         

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

Извините, у меня нет доступа к книге прямо сейчас.

    
2
2011-06-14 08: 07: 40Z
  1. Вы можете загрузить его здесь eknigi.org/engine/download.php?id=70634 и выполните поиск здесь 2019-06-25 08: 01: 38Z

Я успешно запустил отладчик, который поставляется с модулем epic 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 р>

Для Epic

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

    
2
2013-01-16 20: 06: 33Z

Я и несколько других в моей компании пытались подключить отладчик к 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
2014-04-29 13: 17: 23Z
источник размещен Вот