How to get a backtrace on Unix with the bash or tcsh shell

Last edited on

How to get a Unix backtrace for a crashed application in a shell

Step #1 - Set your allowed core dump size to an unlimited value (you can check this with ulimit -a).

In bash:

ulimit -c unlimited

In tcsh:

limit core unlimited

Step #2 - Turn off the Squish crash handler by setting this environment variable:

In bash:

export SQUISH_NO_CRASHHANDLER=1

In tcsh:

setenv SQUISH_NO_CRASHHANDLER 1

Step #3 - In the same shell, start the Squish IDE, and reproduce the crash.

Step #4 - Start gdb with the path and file name of the crashed binary and the path and file name of the core file.

General format to invoke gdb for this:

gdb path_and_file_name_of_crashed_binary path_and_file_name_of_core_file

For example if /home/myuser/myautv1/bin/myautbinary crashed and the core file /home/myuser/myautv1/bin/core got created this should be used:

gdb /home/myuser/myautv1/bin/myautbinary /home/myuser/myautv1/bin/core

(To find out which binary file the core file is from execute "file /home/myuser/myautv1/bin/core"

IMPORTANT: For correct backtraces it is mandatory to use the newly generated core file and the correct file name and path of the binary that crashed.

Step #5 - When you get a prompt, enter:

bt full

(To quit gdb type q then press Enter.)

Send the output of this command to Squish support. (Please do not send the actual core file!)

Locating the generated core file

Unix systems allow for the tuning of the file name pattern and location of core files. As a result the core file mentioned above might be named differently or not be found in the current working directory of an application that has crashed.

The following instructions apply to Linux systems only. Please ask froglogic support for equivalent instructions for other operating systems.

If the following statement returns a non-zero value the file name will be core.xyz with xyz denoting the process ID (PID) of the process that crashed.

cat /proc/sys/kernel/core_uses_pid

The setting revealed by this statement denotes the directory and file name pattern. By default it is just core.

cat /proc/sys/kernel/core_pattern