Xref: news2.mv.net comp.os.msdos.djgpp:4403 From: Roland Exler Newsgroups: comp.os.msdos.djgpp Subject: user-requested stack-trace at exit Date: Thu, 30 May 1996 10:32:35 -0700 Organization: Institute for el. Measurement, University of Linz, Austria Lines: 66 Message-ID: <31ADDBB3.45D7@jk.uni-linz.ac.at> NNTP-Posting-Host: sensor4.emt.uni-linz.ac.at Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Taking a recently posted message from A.Appleyard I've hacked a stack-trace for V2. With this functions it's possible to determine how deep the function-nesting is at a particular place in the program and print a stack-trace suitable for use with symify. This way you can trace down how you've reached some point in your program without generating a floating-point error or a NULL-pointer dereference. I think this part of code would help debugging many programs. I'll try to redefine assert() so it will print a stack-trace too. Roland ------------------------------ trace.cc ------------------------------ // try using the following commands: // gcc -Wall -O2 -g trace.cc -o trace // trace // symify trace #include // return depth of function-calls: // depth()==2 is in main(), depth()==3 in fist subroutine, ... int depth() { long *bp=(long*)&bp+1; int j=0; while ((bp=(long*)*bp)) j++; return j; } // abort program with stacktrace suitable for symify // if -g was used for compiling void abort_with_stacktrace(FILE *out=stderr) { long *bp=(long*)&bp+1; fprintf(out,"user requested abort of program using 'abort_with_stacktrace()'!\n"); while (*bp) { fprintf(out," 0x%08lx\n",((long*)bp)[1]); bp=(long*)*bp; } abort(); } // test-program to verify functions for stack-tracing void sub() { printf("depth in sub()=%d\n",depth()); abort_with_stacktrace(); } int main() { printf("depth in main()=%d\n",depth()); sub(); return 0; } +---------------------------------------+---------------------------+ I Roland Exler I EMAIL: I I Universitaet Linz I R DOT Exler AT jk DOT uni-linz DOT ac DOT at I I Institut fuer Elektrische Messtechnik I I I Altenbergerstr. 69 I Phone: I I A-4040 Linz, AUSTRIA I + 43 732 2468 9205 I +---------------------------------------+---------------------------+