Feedback
Did this article resolve your question/issue?

   

Article

What is proGetStack?

Information

 
TitleWhat is proGetStack?
URL NameP134912
Article Number000128467
EnvironmentProduct: OpenEdge
Version: 10.1C, 10.2x, 11.x, 12.x
OS: All supported platforms
Question/Problem Description
What is proGetStack?
How to get ABL stack trace for Windows and UNIX?
How to generate runtime ABL stack trace for windows and UNIX?
Is there a way to generate meaningful stack trace on windows and UNIX for OE product?
Steps to Reproduce
Clarifying Information
Error Message
Defect Number
Enhancement Number
Cause
Resolution
On most platforms, we can almost always generate a meaningful stack trace by sending a signal SIGUSR1 (kill -USR1 <pid>) to the kill command however, on Windows platforms since OpenEdge 10.0x and above, because of performance optimization done for code execution, it is almost impossible to get a meaningful stack trace even the process has crashed and protrace generated.

Since OpenEdge 10.1C further enhancements were introduced to protrace output by providing an ABL stack trace with a list of persistent procedures or classes that are in memory and their handle ID's along with the C stack trace for any ABL client process (which includes the WebSpeed and AppServer agents). This Enhancement PSC00183237/OE00147006 is available on both UNIX and WINDOWS platforms. It is advisable to upgrade to OpenEdge 11.6.4, 11.7.0 or later when using this feature on Linux due to asynchronous unsafe calls in the signal handler .

Starting in 10.1C, whenever we generate the protrace file on Windows when a process crashes, we will include the ABL stack trace and the list of persistent procedures or classes that are in memory with their handle ids. The ABL stack trace and the list of procedures will be written after the C stack trace.  On Windows it is necessary to copy the pdbfiles from the install media. For further information refer to Article: What is the purpose of .PDB files?

Starting in OpenEdge 11.7, when a protrace file is generated for a client of a database, the following messages are generated to the database log:
  • Generating <path_to_protrace_file> - This text is written to the connected db.lg when a crash occurs and a protrace file is generated.
  • Protrace location: <path_to_protrace_file> - This text is written to the connected db.lg when a user executes proGetStack against the database's client process to generate a protrace file.

The generate a protrace against a progress ABL client executable:

The %dlc%\bin\proGetStack.bat script calls _debugconfigure.exe which is enhanced to get 4GL Stack during runtime on demand against an ABL Client (_progres, _proapsv, prowin).
The progetstack command used to obtain a stack from a process must be the same version of OpenEdge as the process is running.  Example:  Do not use OpenEdge 11 progetstack command against a 10.2B process.
$ proGetStack <pid>
  • Where pid is the process ID of the ABL process.
  • The file generated is protrace.<pid> in the directory where the failing process was started from which is not necessarily the work directory and write permissions are needed.
For consistency sake, we also provides a script named proGetStack on UNIX which will execute "kill -USR1", which can be used to generate runtime 4GL stack trace when debugging a problem.

This will only affect ABL clients, including the AppServer and WebSpeed agents, since these are the processes which execute ABL code. Other OpenEdge processes, such as the database utilities and server processes will not be affected by this change: progetstack does not support the PASOE multi-session agent. Stack information for a specific session is available through JMX, OE Manager (oemanager.war), or the REST API.  For further information refer to Article: On Linux platforms in particular it is advisable to upgrade to OpenEdge to OpenEdge 11.6.4, 11.7.0 or later when using this feature on Linux. For further details refer to Article:
Workaround
Notes
Last Modified Date10/1/2020 3:12 PM
Attachment 
Files
Disclaimer The origins of the information on this site may be internal or external to Progress Software Corporation (“Progress”). Progress Software Corporation makes all reasonable efforts to verify this information. However, the information provided is for your information only. Progress Software Corporation makes no explicit or implied claims to the validity of this information.

Any sample code provided on this site is not supported under any Progress support program or service. The sample code is provided on an "AS IS" basis. Progress makes no warranties, express or implied, and disclaims all implied warranties including, without limitation, the implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample code is borne by the user. In no event shall Progress, its employees, or anyone else involved in the creation, production, or delivery of the code be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample code, even if Progress has been advised of the possibility of such damages.