I just looked at the description of __le_traceback().

It looks as if it can be called with the DSA from the CIB;
this way, it should give you all the information you need, IMO.

In the calling example we have:

tbck_parms.__tf_dsa_addr = 0;
|
this should be changed for our situation, I think.

Kind regards

Bernd|


Am 22.01.2015 um 20:42 schrieb Bernd Oppolzer:
Am 22.01.2015 um 20:22 schrieb Charles Mills:
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).

Kind regards

Bernd


Charles

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
Behalf Of Don Poitras
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.

https://www-304.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r
1.bpxbd00/letraceback.htm?lang=en

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN



----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to