Mojolicious debugging with perl -d

543 views
Skip to first unread message

mongo...@gmail.com

unread,
Dec 2, 2016, 12:20:22 AM12/2/16
to Mojolicious
Hi!

I'am newbie in Mojo.
Please, tell me, how I can run Mojolicious app (not lite), run
in full perl debug mode (perl -d) with breakpoints, vars watch etc.

p.s.
the application which I need debugging have a main package, let's call him "MyPackage.pm" with function "startup {}", if this important.

Thanks you!

Dotan Dimet

unread,
Dec 2, 2016, 12:58:32 AM12/2/16
to mojol...@googlegroups.com
perl -d script/my_app get /route/to/controller

Stepping through mojo code until it reaches your startup() method is tricky and time-consuming.
The best way to avoid all that is to add the line
$DB::single = 1;
inside your startup() method code. Then, once you run the debugger, just hit 'c' at the prompt
and it will break at that position.

Something worth considering, particularly if you are trying to debug controller code (or anything that happens in a route),
is that Mojo always runs your app in an Event loop, even in the debugger, which means that timeouts can happen (will definitely happen)
while you are pondering your code.
http://mojolicious.org/perldoc/Mojolicious/Guides/FAQ#What-does-Inactivity-timeout-mean
You can avoid this by setting MOJO_INACTIVITY_TIMEOUT=0 in your environment before starting the debugger.

Good Luck,
 Dotan
--
You received this message because you are subscribed to the Google Groups "Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious...@googlegroups.com.
To post to this group, send email to mojol...@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.


mongo...@gmail.com

unread,
Dec 4, 2016, 9:59:06 AM12/4/16
to Mojolicious
Thank you!
It's work. For one GET request, for example.
But, how I can send POST request? (I am testing code in module authentication)
And moreover, how I can run and still application in perldebug mode, and from time to time, stopping him by "ctrl+c", set breakpoint watch vars, and continue application work, for more deep debugging?
Thanks in advance!


пятница, 2 декабря 2016 г., 13:58:32 UTC+8 пользователь Dotan Dimet написал:

Dotan Dimet

unread,
Dec 4, 2016, 10:59:19 AM12/4/16
to mojol...@googlegroups.com
You can make a POST request with the get command :
http://mojolicious.org/perldoc/Mojolicious/Command/get
But when your arguments get complicated, it might be best to just write a test - using Test::Mojo - and run that in the debugger:
http://mojolicious.org/perldoc/Mojolicious/Guides/Growing#toc
I wouldn't trust "ctrl+c", because it just breaks the debugger at some random point in the code (probably somewhere unhelpful inside the event loop); I think it's better to set up breakpoints in advance. Use the $DB::single=1 trick to break the debugger at the point the code you're interested in is already loaded - startup() in your app or the beginning of an action method of your controller - and then set further breakpoints, watch vars, etc.
Have fun,

mongo...@gmail.com

unread,
Dec 4, 2016, 11:45:16 PM12/4/16
to Mojolicious
Can I transfer form's params from command line with POST request? I read the doc and don't understand, how I can do it. Or for this I need use test's?


I wouldn't trust "ctrl+c", because it just breaks the debugger at some random point in the code (probably somewhere unhelpful inside the event loop); I think it's better to set up breakpoints in advance. Use the $DB::single=1 trick to break the debugger at the point the code you're interested in is already loaded - startup() in your app or the beginning of an action method of your controller - and then set further breakpoints, watch vars, etc.
may be.
But if I want use "source" debugger command, without change my code?


воскресенье, 4 декабря 2016 г., 23:59:19 UTC+8 пользователь Dotan Dimet написал:

mongo...@gmail.com

unread,
Dec 5, 2016, 3:48:03 AM12/5/16
to Mojolicious
I could make request as follows:
perl -d ./script/myapp.pl get -M POST -H 'Content-Type: application/x-www-form-urlencoded' -c 'user=username&password=thisspass' /auth

Thanks you again!

понедельник, 5 декабря 2016 г., 12:45:16 UTC+8 пользователь mongo...@gmail.com написал:
Reply all
Reply to author
Forward
0 new messages