8 @sigs or @sigs = qw(QUIT ILL TRAP ABRT EMT FPE BUS SEGV SYS PIPE TERM);
10 $SIG{$sig} = 'sigtrap::trap';
15 package DB; # To get subroutine args.
16 $SIG{'ABRT'} = DEFAULT;
17 kill 'ABRT', $$ if $panic++;
18 syswrite(STDERR, 'Caught a SIG', 12);
19 syswrite(STDERR, $_[0], length($_[0]));
20 syswrite(STDERR, ' at ', 4);
21 ($pack,$file,$line) = caller;
22 syswrite(STDERR, $file, length($file));
23 syswrite(STDERR, ' line ', 6);
24 syswrite(STDERR, $line, length($line));
25 syswrite(STDERR, "\n", 1);
28 for ($i = 1; ($p,$f,$l,$s,$h,$w) = caller($i); $i++) {
34 unless /^(?: -?[\d.]+ | \*[\w:]* )$/x;
35 s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
36 s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
39 $w = $w ? '@ = ' : '$ = ';
40 $a = $h ? '(' . join(', ', @a) . ')' : '';
41 $mess = "$w$s$a called from $f line $l\n";
42 syswrite(STDERR, $mess, length($mess));