With Frysk, one of the things we have been pretty good at it is extrapolating functionality to the user when we write it. Normally that is a command-line utility like: fmaps as well as a command function in fhpd: info maps.
Even though each one of these has a man page, and an actual help page in fhpd, it would probably be a good idea to do a round-up. We’ll take a look at fcore, fauxv, fcatch, fdebuginfo and fdebugrpm today, and others in the next blog entry.
fcore – This will capture a corefile from a running process. It attaches to a process, blocks all its threads, creates a corefile of the process and then unblocks all threads. E.g:
sleep 5000 & [1] 24325 fcore 24325 ls -lash core.24325 75M -rw-r--r-- 1 test test 77M 2008-03-03 08:37 core.24325
fauxv – This will print out the process auxiliary from either a process, executable or corefile
fauxv core.24325 /bin/sleep AT_SYSINFO_EHDR (SYSINFO EHDR) : 0x7fff0d1fe000 AT_HWCAP (Machine dependent hints about) : 0x178bfbff AT_PAGESZ (System page size) : 4096 AT_CLKTCK (Frequency of times()) : 100 AT_PHDR (Program headers for program) : 0x400040 AT_PHENT (Size of program header entry) : 56 AT_PHNUM (Number of program headers) : 8 AT_BASE (Base address of interpreter) : 0 AT_FLAGS (Flags) : 0 AT_ENTRY (Entry point of program) : [unknown] (0x4011b0) AT_UID (Real uid) : 500 AT_EUID (Effective uid) : 500 AT_GID (Real gid) : 500 AT_EGID (Effective gid) : 500 AT_0x17 (AT_0x17) : 0 AT_PLATFORM (String identifying platform.) : x86_64 AT_NULL (End of vector) : 0
fcatch – If given a pid, it will attach to a running process. If given an executable, will run and then attach to that process. When attached fcatch will monitor the process for error conditions (eg sigsegv) and when it detects one, will print a stack back-trace:
fcatch ../pkglibdir/funit-hello fcatch: from PID 24348 TID 24348: SIGSEGV(11) detected - dumping stack trace for TID 24348 #0 0x00000000004004bc in print () from /test/frysk_bin/frysk-core/frysk/pkglibdir/funit-hello #1 0x00000000004004eb in main () from /test/frysk_bin/frysk-core/frysk/pkglibdir/funit-hello #2 0x0000003eb641e074 in __libc_start_main () from /lib64/libc-2.7.so #3 0x0000000000400409 in _start () from /test/frysk_bin/frysk-core/frysk/pkglibdir/funit-hello
fdebuginfo and fdebugrpm – These utilities are so close in functionality we’ll look at them together. fdebuginfo will print out the debuginfo known to be installed on a system for a pid, executable or corefile:
fdebuginfo 24325 /bin/sleep --- /lib64/ld-2.7.so --- /lib64/librt-2.7.so --- /lib64/libc-2.7.so --- /lib64/libpthread-2.7.so ---
And fdebugrpm will install that debuginfo and dependencies:
fdebugrpm 24325 Missing Debuginfo package(s) ============================ coreutils-debuginfo-6.9-13.fc8 glibc-debuginfo-2.7-2 Do you wish to install the above packages? [y/n]: y --> Running transaction check ---> Package glibc-debuginfo.x86_64 0:2.7-2 set to be updated ---> Package coreutils-debuginfo.x86_64 0:6.9-13.fc8 set to be updated --> Finished Dependency Resolution Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: coreutils-debuginfo x86_64 6.9-13.fc8 updates-debuginfo 3.5 M glibc-debuginfo x86_64 2.7-2 fedora-debuginfo 20 M Transaction Summary ============================================================================= Install 2 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 24 M Is this ok [y/N]: y
Running fdebuginfo again after fdebugrpm:
fdebuginfo 24325 /bin/sleep /usr/lib/debug/bin/sleep.debug /lib64/ld-2.7.so /usr/lib/debug/lib64/ld-2.7.so.debug /lib64/librt-2.7.so /usr/lib/debug/lib64/librt-2.7.so.debug /lib64/libc-2.7.so /usr/lib/debug/lib64/libc-2.7.so.debug /lib64/libpthread-2.7.so /usr/lib/debug/lib64/libpthread-2.7.so.debug
As I hinted at earlier, both these commands work with executables, pids, and corefiles. so:
fdebuginfo core.24325 /bin/sleep
is just as valid.
Hope you enjoyed part 1.
[...] up some examples of utilities created on top of the Frysk framework that you might find handy (part1, part2, part3). We now also have the frysk manual pages for the non-gui parts [...]