tags:

views:

199

answers:

2

Hi Guys,

I m constructing a C++ program in which I need to handle SIGSEGV and Signal handler should be able to print the Back Trace. Can any one help in this.

Regards

+2  A: 

The best way to get a SIGSEV backtrace is generating a core file more than printing a backtrace; and if you handle the SIGSEV the system will not call the default core generator, take care with it.

If you want to handle the SIGSEV anyway (as have been commented before this is system deppendant), see the libc backtrace function [http://www.gnu.org/s/libc/manual/html_node/Backtraces.html ] , it culd be useful.

Jon Ander Ortiz Durántez
+1 Let the OS generate a core+backtrace for you.
Mark B
A: 

Adding to what Jon replied, you basically need a function like this to print backtrace. This function shoudl be called on the SIGSEGV. But I second Jon's point that letting the system generate corefile would be a much better debugging mechanism for you

void print_trace(int nSig)
{
  printf("print_trace: got signal %d\n", nSig);

  void           *array[32];    /* Array to store backtrace symbols */
  size_t          size;     /* To store the exact no of values stored */
  char          **strings;    /* To store functions from the backtrace list in ARRAY */
  size_t          nCnt;

  size = backtrace(array, 32);

  strings = backtrace_symbols(array, size);

  /* prints each string of function names of trace*/
  for (nCnt = 0; nCnt < size; nCnt++)
    fprintf(stderr, "%s\n", strings[nCnt]);


  exit(-1);
}
geekGod
Thanx for replies guys...I used the same technique but it is not printing function name..What can be the possible reasons.Even it is not printing for the sample code given in following link:http://www.gnu.org/s/libc/manual/html_node/Backtraces.html
Ravi Varshney
Please ensure the app is compiled using -g option. This is required to generate the symbols.
geekGod