Wie kann ich einen debugger anfügen an einen Laufenden Perl-Prozess?

Ich ein Perl-Prozess, der stecken geblieben ist, möchte ich stecken im inneren mit einem debugger, um zu sehen, was falsch ist. Ich kann nicht den Prozess starten. Kann ich den debugger an den Laufenden Prozess? Ich wissen Sie, ich kann tun gdb -p, aber gdb mir nicht weiterhelfen. Ich habe versucht Enbugger, aber gescheitert:

$ perl -e 'while (1) {}'&
[1] 86836
$ gdb -p 86836

Attaching to process 86836.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ............................. done
Reading symbols for shared libraries + done
0x000000010c1694c6 in Perl_pp_stub ()
(gdb) call (void*)Perl_eval_pv("require Enbugger;Enbugger->stop;",0)
perl(86836) malloc: *** error for object 0x3: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug

Program received signal SIGABRT, Aborted.
0x00007fff8269d82a in __kill ()
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on"
Evaluation of the expression containing the function (Perl_eval_pv) will be abandoned.
(gdb) 

Mache ich es falsch? Gibt es andere Möglichkeiten?


P. S. Wenn Sie denken, Sie könnten profitieren von einem debugger an einen Laufenden Prozess an sich selbst, können Sie einen debugger Hintertür ausgelöst durch SIGUSR1:

use Enbugger::OnError 'USR1';

Dann können Sie einfach kill -USR1 pid und Ihr Prozess-Sprung in den debugger.

InformationsquelleAutor zoul | 2012-01-12
Schreibe einen Kommentar