env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/libSegFault.so someapp
Note that the actual path to the preload library may differ. On my machine, I’d use
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so some-64bit-app
or
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/i386-linux-gnu/libSegFault.so some-32bit-app
depending whether the application I was running was compiled 64-bit or 32-bit. (You can use file
to check.)
The source tells us there are three environment variables that define how libSegFault.so
behaves:
-
SEGFAULT_SIGNALS
: The list of signals that cause a stack trace.
The default isSIGSEGV
. A defined but emptySEGFAULT_SIGNALS
means no signals cause a stack trace.
The supported values aresegv
,ill
,abrt
,fpe
,bus
on systems that have the SIGBUS signal,stkflt
on systems that have the SIGSTKFLT signal, andall
for all of these. -
SEGFAULT_USE_ALTSTACK
: If defined in the environment,libSegFault.so
uses an altenate stack for the stack trace signals.
This may come in handy if you are debugging stack corruption. -
SEGFAULT_OUTPUT_NAME
: If defined in the environment, the stack trace is written to this file instead of standard error.
To be honest, I found these initially by examining the library with strings /lib/libSegFault.so | sed -e '/[^0-9A-Z_]/ d'
. All standard libraries (libSegFault.so
having become a part of GNU C library) are tunable via environment variables, so using something like that command to dump any strings that look like environment variable names is a quick way to find stuff to search for. Doing a web search on "SEGFAULT_SIGNALS" "SEGFAULT_OUTPUT_NAME"
produces a number of useful links; seeing that it was part of the GNU C library nowadays, I went to the source git archives, found the actual source file for the library, and posted my answer.