While debugging a problem a few weeks back, I needed to generate a core file from a hung process. I typically use the gcore utility to generate core files from running processes, but in this case I was already attached to the process with gdb, so gcore failed:
$ gcore 2575
ptrace: Operation not permitted.
You can't do that without a process to debug.
Gak! I remembered reading about a gdb option that would dump core, so I wandered off to read through my gdb notes. Sure enough, gdb has a “generate-core-file” command to create a core file:
$ gdb -q - 2575
Attaching to process 2575
Reading symbols from /usr/sbin/gpm...(no debugging symbols found)...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
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/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
0x0046e7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
(gdb) generate-core-file
Saved corefile core.2575
(gdb) detach
Detaching from program: /usr/sbin/gpm, process 2575
(gdb) quit
$ ls -al core.
-rw-r--r-- 1 root root 2468288 Dec 11 13:49 core.2575
Nifty! I am starting to wonder if there is anything gdb can’t do. :)