Am 22.01.2015 um 20:22 schrieb C.M.:
> Thanks! Do you have any idea whether __le_traceback will produce meaningful
> results in a situation in which CEE3DMP does not output a useful traceback?
> The C++ stack has apparently already been unwound when C++ enters a catch()
> block. The catch() block appears to have been called from the point at which
> the try block was entered.
See my previous post, too.
If __le_traceback starts from the current stack frame, then of course it will
not show you the information of the stack frames below the catch-Block, which
have already been unwound.
On the other hand: if our assumptions so far regarding the contents of the CIB
are correct, then the CIB should contain the register information at the time of
the exception, that is: for example the register 13 at the time of the error. I
believe (!!) that the stack frames below the catch block still exist and if
there is a way to call __le_traceback with a parameter (the starting
stack_frame), you should be able to get that starting point from the CIB and
start it from there.
We had at our site a function called ccback () which did exactly that. And, of
course, we called it before there was some unwinding of stack frames.
I would as a first step try to print the contents of the EPIE inside the CIB and
see if it fits well with the stack frame of the function containing the
exception (see register 13 and compare it to the address of the DSA).
> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
> Behalf Of D.P.
> Sent: Thursday, January 22, 2015 11:09 AM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: In C++ any way to get traceback info in a catch()?
> The CIB is described in __le_api.h. There's a useful function for producing
> tracebacks, __le_traceback. The doc has sample code calling it in C.
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to email@example.com with the message: INFO IBM-MAIN