Message-Id: <3.0.16.19980112143358.2987cd9c@hem1.passagen.se> Date: Mon, 12 Jan 1998 14:34:07 -0500 To: Eli Zaretskii From: Peter Palotas Subject: Re: Call traceback. Cc: djgpp AT delorie DOT com Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Precedence: bulk At 14.41 1998-01-11 +0200, you wrote: > >On Fri, 9 Jan 1998, Peter Palotas wrote: > >> I was wondering if it is somehow possible to get a call traceback, during >> the execution of a program, i.e. *without* terminating the program or >> causing a GPF! (Perhaps even the function names, although this would >> probably be kind of hard I suppose). > >You need to call setjmp with the address of the exception structure >and then call the equivalent of `do_faulting_finish_message' function >from the library sources, but with the call to `exit' removed. An >untested fragment follows: > > #include > #include > > jmp_buf fake_exception; > > __djgpp_exception_state_ptr = &fake_exception; > if (setjmp(__djgpp_exception_state) > { > /* Error action. You shouldn't get here, ever. */ > } > else > print_traceback(); > >`print_traceback' should have the code in `do_faulting_finish_message' >(defined on src/libc/go32/dpmiexcp.c which is in djlsr201.zip) that >walks the stack frames. > >To have the function names printed also, you will need to add to >`print_traceback' the necessary code from `symify' (also in >djlsr201.zip). Thanx a lot! =) Exactly what I was looking for. I guess there isn't a portable way of doing this, i.e. a way that would work with GCC under Linux too?? (If not, do you know how to do this under Linux?) -- Peter Palotas alias Blizzar -- blizzar AT hem1 DOT passagen DOT se -- ***************************************************** * A brief description of DJGPP: * * NEVER BEFORE HAS SO FEW DONE SO MUCH FOR SO MANY! * *****************************************************