Consultor Eletrônico



Kbase P134912: What is proGetStack?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   12/28/2010
Status: Verified

GOAL:

What is proGetStack?

GOAL:

How to get ABL stack trace for windows and UNIX?

GOAL:

How to generate runtime ABL stack trace for windows and UNIX?

GOAL:

Is there a way to generate meaningful stack trace on windows and UNIX for OE product?

FACT(s) (Environment):

OpenEdge 10.1C
All Supported Operating Systems

FIX:

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.

Starting in 10.1C, whenever we generate the protrace file on Windows after a process has crashed, 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.

Also starting in 10.1C, there is a way to get ABL stack trace and list of persistent procedures and classes when a process is running. Note that the C stack trace will not be generated in that case, only the ABL specific information. If a process crashes though, it will contain both the C and the ABL call stack information.

The proGetStack.bat script in %dlc%\bin directory calls _debugconfigure.exe which is enhanced to get 4GL stack during runtime on demand.

$ proGetStack <pid>
where pid is the process ID of the ABL process. The file generated is protrace.<pid>

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.