| 1 | = Debugging Libc Panics = |
| 2 | |
| 3 | When process crashes in an unexpected way, LIBC will terminate the process after showing a short panic message. (It will not envoke any just-in-time debugger which you might have installed.) So, if you want to debug a crashing process, you either have to start it with(/in) the debugger, or you have to set the LIBC_PANIC env.var. to "breakpoint". When the "breakpoint" flag is set, or the process is begin debugged, LIBC will execute a breakpoint instruction before proceeding to dump and terminate the process. This give the debugger a chance to kick in and for you to have a look at why and where it paniced. |
| 4 | |
| 5 | The LIBC_PANIC environment variable knows more flags than just "breakpoint". All flags are, well flags, and they are either set or cleared. To clear a flag you usually prefix the flag name with "no". So, if you fancy to debug a process but *not* to execute a breakpoint instruction when libc panics, set LIBC_PANIC to "nobreakpoint". |
| 6 | These are the flags: |
| 7 | * quiet / noquiet - don't print any panic message, just fail. This flag is cleared by default. |
| 8 | * breakpoint / nobreakpoint - execute breakpoint instruction. This flag is by default cleared when not debugged and set if debugged (*). |
| 9 | * verbose / terse - display pid, ppid, tid, prioity and such. This flag is set (verbose) by default. |
| 10 | * dump / nodump - attempt a process dump (similar to core dump). This flag is set by default. |
| 11 | |
| 12 | |
| 13 | (*) The diffent breakpoint default when the process is being debugged was introduced with LIBC 0.6.1. |