Recipe
Complete example
The following is a complete example showing a sample program being launched and gdb loading Carp into the program during its execution and calling the perl function cluck(). Carp::cluck is a convenient function to log the current perl stack to STDERR.
[server ~]$ perl -e 'while(1){foo()};sub foo { sleep 1 }' &
[1] 22480
[server ~]$ ps x
PID TTY STAT TIME COMMAND
10351 ? S 0:01 sshd: diotalevi@pts/77
10352 pts/77 Ss+ 0:00 -bash
22311 ? S 0:00 sshd: diotalevi@pts/37
22312 pts/37 Ss 0:00 -bash
22354 pts/37 S+ 0:00 screen -x -R
22356 pts/41 Ss 0:00 -/bin/bash
22480 pts/41 S+ 0:00 perl -e while(1){foo()};sub foo { sleep 1 }
22418 pts/51 Ss 0:00 -/bin/bash
22479 pts/51 R+ 0:00 ps x
[diotalevi ~]$ gdb -p 22480
GNU gdb Red Hat Linux (6.3.0.0-1.132.EL3rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and y
+ou are
welcome to change it and/or distribute copies of it under certain cond
+itions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for det
+ails.
This GDB was configured as "i386-redhat-linux-gnu".
Attaching to process 22480
warning: The current VSYSCALL page code requires an existing execuitab
+le.
Use "add-symbol-file-from-memory" to load the VSYSCALL page by hand
Reading symbols from /usr/local/bin/perl...(no debugging symbols found
+)...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
Reading symbols from /lib/libnsl.so.1...(no debugging symbols found)..
+.done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /lib/libdl.so.2...(no debugging symbols found)...
+done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/tls/libm.so.6...(no debugging symbols found)
+...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/libcrypt.so.1...(no debugging symbols found)
+...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /lib/libutil.so.1...
(no debugging symbols found)...done.
Loaded symbols for /lib/libutil.so.1
Reading symbols from /lib/tls/libc.so.6...(no debugging symbols found)
+...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)
+...done.
Loaded symbols for /lib/ld-linux.so.2
0xb7eebacb in __nanosleep_nocancel () from /lib/tls/libc.so.6
(gdb) set variable PL_sig_pending = 1
(gdb) b Perl_despatch_signals
Breakpoint 1 at 0x809ed59
(gdb) c
Continuing.
Breakpoint 1, 0x0809ed59 in Perl_despatch_signals ()
(gdb) delete breakpoints
Delete all breakpoints? (y or n) y
(gdb) call Perl_eval_pv("use Carp; Carp::cluck('Hello world')",0)
Hello world at (eval 1) line 1
eval 'use Carp; Carp::cluck(\'Hello world\')
;' called at -e line 1
main::foo() called at -e line 1
$1 = 135614820
(gdb) call Perl_sv_free(135614820)
$2 = 135389568
|