2015-08-14 12 views
7

Sono nuovo di mojolicious ma ho usato Perl per un po 'di tempo. Devo passare attraverso alcuni cerchi ma posso ottenere il debugger interattivo Perl (e Komodo) che funzionano con connessioni remote per Apache ma non riesco a trovare nulla sul debug interattivo con hypnotoad o morbo.Come si può richiamare il debug interattivo in Perl con hypnotoad o morbo?

Gli esempi della riga di comando nel tutorial di base su http://mojolicio.us/perldoc/Mojolicious/Guides/Tutorial#Hello-World funzionano bene perché è possibile avviarli con perl -d, ma non vedo comunque di dire allo script hypnotoadctl di mettere il servizio in modalità di debug interattiva ala apache.

Non è possibile? Suggerimenti? Suggerimenti? Puntatori?

risposta

6

morbo e hypnotoad sono programmi perl, quindi è possibile avviarli con lo switch -d.

perl -d $(which morbo) myMojoApp.pl 

E 'probabilmente più facile da spargere un po' di $DB::single = 1 dichiarazioni intorno a te applicazione in cui si desidera i punti di interruzione iniziali per andare a correre c come primo comando del debugger. Quando si esegue una richiesta che raggiunge un punto di interruzione, verrà visualizzato un prompt del debugger nel terminale che ha avviato morbo.

hypnotoad sarà più complicato da utilizzare con il debugger perché chiude rapidamente tutti i filehandle standard, chiama più volte fork e diventa un daemon.

+3

"hypnotoad" è pensato per l'uso in produzione, quindi è probabile che tu abbia corretto tutti i bug prima che ne abbiate bisogno. :) – friedo

+0

'hypnotoad' esegue i thread ed esce appena l'interfaccia di debugger viene persa; con errore 'morbo' there:' ######### Forked, ma non so come creare un nuovo TTY. ######### ' –

1

Grazie a "pink_mist". Si può fare:

perl -d myMojoApp.pl daemon -l http://*:29849 

Ma la configurazione dell'applicazione non è applicata. Non so perché.

2

Come JHThorsen points out, test Mojolicious standard sono scritti in realtà ordinarie Perl, in modo da poter eseguire il debug i test con:

perl -d t/mytest.t 

Il -Ilib aggiunge la directory lib/ alla @INC includere lista in modo verranno caricati i moduli .

Un problema è che molti moduli non vengono caricati fino al tempo di esecuzione, quindi se il debugger ti chiede simboli non ancora caricati, probabilmente vorrai impostare i punti di interruzione dopo aver forzato un prompt di debug con un

accuratamente inserito
$DB::single = 1;