LOGO
____ _ _
| _ \ _ _ _ __ | |_(_)_ __ ___ ___
| |_) | | | | '_ \| __| | '_ ` _ \ / _ \
| _ <| |_| | | | | |_| | | | | | | __/
|_| \_\\__,_|_| |_|\__|_|_| |_| |_|\___|
____ _
| _ \ ___| |__ _ _ __ _ __ _ ___ _ __
| | | |/ _ \ '_ \| | | |/ _` |/ _` |/ _ \ '__|
| |_| | __/ |_) | |_| | (_| | (_| | __/ |
|____/ \___|_.__/ \__,_|\__, |\__, |\___|_|
|___/ |___/
NAME
Runtime::Debugger - Easy to use REPL with existing lexicals support.
SYNOPSIS
tl;dr - Easy to use REPL with existing lexicals support.
(empahsis on "existing" since I have not yet found this support in others modules).
Try with this command line:
perl -MRuntime::Debugger -E 'my $str1 = "Func"; our $str2 = "Func2"; my @arr1 = "arr-1"; our @arr2 = "arr-2"; my %hash1 = qw(hash 1); our %hash2 = qw(hash 2); my $coderef = sub { "code-ref: @_" }; {package My; sub Func{"My-Func"} sub Func2{"My-Func2"}} my $obj = bless {}, "My"; eval run; say $@'
DESCRIPTION
One can usually just do this:
# Insert this where you want to pause:
$DB::single = 1;
# Then run the perl debugger to navigate there quickly:
PERLDBOPT='Nonstop' perl -d my_script
If that works for then great and dont' bother using this module!
Unfortunately for me, it was not working due to the scenario in which a script evals another perl test file and I would have liked to pause inside the test and see whats going on without having to keep rerunning the whole test over and over.
This module basically drops in a read,evaludate,print loop (REPL) whereever you need like so:
use Runtime::Debugger;
eval run; # Not sure how to avoid using eval here while
# also being able to keep the lexical scope.
# Any ideas ? :)
Press tab to autocomplete any lexical variables in scope (where "eval run" is found).
Saves history locally.
Can use 'p' to pretty print a variable or structure.
New Variables
Currently its not possible to create any new lexicals variables while I have not yet found a way to run "eval" with a higher scope of lexicals. (perhaps there is another way?)
You can make global variables though if:
- By default ($var=123) - Using our (our $var=123) - Given the full path ($My::var = 123)
SUBROUTINES/METHODS
run
Runs the REPL (dont forget eval!)
eval run
Sets $@
to the exit reason like 'INT' (Control-C) or 'q' (Normal exit/quit).
_match
Returns the possible matches:
Input: words => ["cat", "cake", "bat", "bake"], partial => "c", # Default: "" - What you typed so far. prepend => "Class>", # Default: "" - prepend to each possiblity. nospace => 0, # Default: "0" - will not append a space after a completion.
help
Show help section.
hist
Show history of commands.
By default will show 20 commands:
hist
Same thing:
hist 20
Can show more:
hist 50
p
Data::Dumper::Dump anything.
p 123
p [1, 2, 3]
Can adjust the maxdepth (default is 1) to see with: "#Number".
p { a => [1, 2, 3] } #1
Output:
{
'a' => 'ARRAY(0x55fd914a3d80)'
}
Set maxdepth to '0' to show all nested structures.
uniq
Return a list of uniq values.
attr
Internal use.
debug
Internal use.
term
Internal use.
ENVIRONMENT
Install required library:
sudo apt install libreadline-dev
Enable this environmental variable to show debugging information:
RUNTIME_DEBUGGER_DEBUG=1
SEE ALSO
https://metacpan.org/pod/Devel::REPL
Great extendable module!
Unfortunately, I did not find a way to get the lexical variables in a scope. (maybe missed a plugin?!)
https://metacpan.org/pod/Reply
This module also looked nice, but same issue.
AUTHOR
Tim Potapov, <tim.potapov[AT]gmail.com>
🐪🥷
BUGS
Please report any (other) bugs or feature requests to https://github.com/poti1/runtime-debugger/issues.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Runtime::Debugger
You can also look for information at:
https://metacpan.org/Runtime::Debugger https://github.com/poti1/runtime-debugger
LICENSE AND COPYRIGHT
This software is Copyright (c) 2022 by Tim Potapov.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)