-
Notifications
You must be signed in to change notification settings - Fork 3
/
debug.pl
54 lines (48 loc) · 938 Bytes
/
debug.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env perl
# Debugging plugin.
# When OpenKore is sent the SIGQUIT signal, this plugin will print a
# stack trace and will initiate an evaluation console, in which you
# can evaluate any Perl expression.
package DebuggerPlugin;
use strict;
use Carp;
use IO::Socket;
sub out {
if (defined $::interface) {
$::interface->writeOutput('message', $_[0]);
} else {
print $_[0];
}
}
sub get {
if (defined $::interface) {
return $::interface->getInput(-1);
} else {
print "eval> ";
STDOUT->flush;
my $ret = <STDIN>;
$ret =~ s/\n//;
return $ret;
}
}
sub debug {
out Carp::longmess("") . "\n";
print "Evaluation console initialized (type 'q' to quit).\n";
while (1) {
my $input = get();
if ($input eq "q" || $input eq "quit") {
last;
} else {
undef $@;
my $ret = eval $input;
if ($@ ne '') {
out "Error: $@\n";
} else {
out "$ret\n";
}
}
}
exit;
}
$SIG{QUIT} = \&debug;
1;