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
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
SEGFAULT_SIGNALS: The list of signals that cause a stack trace.
The default is
SIGSEGV. A defined but empty
SEGFAULT_SIGNALSmeans no signals cause a stack trace.
The supported values are
buson systems that have the SIGBUS signal,
stkflton systems that have the SIGSTKFLT signal, and
allfor all of these.
SEGFAULT_USE_ALTSTACK: If defined in the environment,
libSegFault.souses 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.