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:
The generate a protrace against a progress ABL client executable:
- 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 %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: