Feedback
Did this article resolve your question/issue?

   

Article

How to interpret a protrace?

Information

 
TitleHow to interpret a protrace?
URL Name000040304
Article Number000163013
EnvironmentProduct: Progress
Version: 8.x, 9.x
Product: OpenEdge
Version: 10.x, 11.x, 12.x
OS: All supported platforms
Question/Problem Description
How to interpret a protrace

What are the parts of a protrace?

What information is available in a protrace when an OpenEdge executable crashes?

What can an OpenEdge user learn from a protrace file before contacting Progress Technical Support?

How to use a protrace file to analyze or debug a crash in an OpenEdge application.
Steps to Reproduce
Clarifying Information
Error Message
Defect Number
Enhancement Number
Cause
Resolution
The following example protrace is annotated to describe the information included in the various sections, and to indicate which sections require interpretation by Progress Technical Support. The example is from a Windows session; some sections would be slightly different on a Unix/Linux operating system.

Date and time the protrace was created.
This can help you match the protrace with a specific incident, or a specific timestamp in a log file.
=====================================================
PROGRESS stack trace as of Mon May 13 17:36:06 2013
=====================================================
 

Release, build and platform of the OpenEdge instance that was running.
This can help you determine whether a known bug is applicable (was it already fixed in this version?), or whether various OpenEdge components in your application are incompatible versions.
Progress OpenEdge Release 11.1 build 1143 on WINNT
 

Startup parameters for the OpenEdge session.
If you know that certain parameters should have been used, this allows you to determine whether the session was actually started with the correct parameters.
Startup parameters:
-pf \\progress\progress$\startup.pf,-cpinternal ISO8859-1,-cpstream ISO8859-1,-cpcoll Basic,-cpcase Basic,-d dmy,-numsep 44,-numdec 46,(end .pf),-pf \\Progress\Company$\Dev\Util\Dev_Client.pf,-db Dev,-ld Physical,-S 27700,-H progress,-N tcp,-s 63,-mmax 4096,-Bt 1000,-T C:\Progress\Temp\Dev,-d dmy,-nb 200,(end .pf),-p logon.w,-basekey ini,-ininame \\Progress\Company$\Dev\Util\Dev_Client.ini,-debugalert
 

The exception code and fault address:
May be used by Progress Technical Support to assist you.
Exception code: 0EEDFADE
Fault address:  7661C41F 01:0000B41F


The module that was running when the application crashed.
KERNELBASE.dll is a Windows library. Other Windows libraries commonly seen in protraces are KERNEL32.dll and NTDLL.dll. If the crash was in the OpenEdge GUI client executable, prowin32.exe or prow32.dll would be listed here. Other OpenEdge modules typically seen included _progres.exe for the OpenEdge character client, or proapsv.exe for an AppServer agent.
 C:\Windows\syswow64\KERNELBASE.dll
 

The contents of the registers at the time of the crash
May be used by Progress Technical Support to assist you.
Registers:
EAX:00000002
EBX:0025F890
ECX:38B0A8F9
EDX:775271D5
ESI:00000000
EDI:0025F7EC
CS:EIP:7600000:774F1261
SS:ESP:0000:4FD8ECD9  EBP:0025F8A0
DS:4AE450  ES:4AE48C  FS:4AE450  GS:0000
Flags:0025F880
 

The Windows debugging module used:
When a debugging tool such as ADPlus is enabled, and the path that will be used by the debugging tool or the protrace code itself when looking for symbol files. Since OpenEdge 11.0 the dbghelp.dll file is shipped with the install media.This information may be used if you are requested by Progress Technical Support to obtain a memory dump from a crash, or if Technical Support suspects the protrace is invalid. Refer to the following Articles: Debugging dll: \\Progress\Progress$\bin\DBGHELP.DLL
Symbol Path: \\Progress\Progress$\bin;\\progress\progress$\pdbfiles
 

The functions:
Functions that were running in the OpenEdge executable, or Operating System functions called by the executable, when the application crashed. The last function called is at the top of the list. This section may be used by Progress Technical support to assist you.
Call Stack:
Address   Frame
774F1261  0025F8A0  LdrUnloadDll+4A

 
The ABL Stack Trace:

The ABL procedures that were running when the application crashed.
  • The last procedure called is at the top of the list.
  • The first string is the name of the internal procedure or function that was executing. 
  • The filespec that follows is the procedure that was executing, relative to the OpenEdge work directory. Compiling this procedure with the DEBUG-LIST option will generate a listing with all include files expanded, and line numbers that will match up with the line numbers in the stack trace. This allows you to see the exact line of code that was executing at the time of the crash. If compiled code was executing, the location of the r-code file is in parentheses at the end of the line.
** ABL Stack Trace **
 
--> OrtariClose Code/PrintOrder.p at line 350  (.\Code\PrintOrder.r)
    Print_Confirmation_Ortari Code/PrintOrder.p at line 5806  (.\Code\PrintOrder.r)
    Action_WorksOrder Code/PrintOrder.p at line 2079  (.\Code\PrintOrder.r)
    PrintOrder programs/worksorder/v-worksorderinput.w at line 9083  (\\progress\company$\Dev\Module\code\programs\worksorder\v-worksorderinput.r)
    ValidateInput programs/worksorder/v-worksorderinput.w at line 10241  (\\progress\company$\Dev\Module\code\programs\worksorder\v-worksorderinput.r)
    USER-INTERFACE-TRIGGER Programs/WorksOrder/WorksOrder.w at line 2079  (\\progress\company$\Dev\Module\code\Programs\WorksOrder\WorksOrder.r)
    Menu/Dynamic.w at line 2740  (\\progress\company$\Dev\Module\code\Menu\Dynamic.r)
    logon.w at line 1684  (\\progress\company$\Dev\Module\code\logon.r)
 

Persistent procedures/Classes
A list of all persistent procedures and classes that were in memory at the time of the crash. This can be used with the ABL stack trace to identify problems with calls to persistent procedures or classes. For example, the procedure called is not in memory at the time. Note that the offset between handles is irrelevant and are not helpful for crash analysis.

** Persistent procedures/Classes **
 
Handle  File Name
001354  .\Code\PrintOrder.r
001275  \\progress\company$\Dev\Module\code\programs\worksorder\v-worksorderinput.r
001270  \\progress\company$\Dev\Module\code\Programs\WorksOrder\b-WorksOrderAddresses.r
001265  \\progress\company$\Dev\Module\code\smart\browser\b-srchworksorder.r
001260  \\progress\company$\Dev\Module\code\Smart\Query\q-Customer.r
001255  \\progress\company$\Dev\Module\code\programs\worksorder\b-customerorders.r
001179  \\progress\company$\Dev\Module\code\Smart\Viewer\v-Customer.r
001169  .\code\programs\worksorder\v-customerref_qry.r
001142  \\progress\company$\Dev\Module\code\programs\worksorder\v-customernote.r
001134  \\progress\company$\Dev\Module\code\src\panel\update_panel_3.r
001129  \\progress\company$\Dev\Module\code\smart\browser\b-srchcustomer2.r
001122  \\progress\company$\Dev\Module\code\smart\browser\b-srchcustomer1.r
001114  \\progress\company$\Dev\Module\code\smart\dialogue\f-srchcustomer.r
001110  \\progress\company$\Dev\Module\code\Programs\WorksOrder\WorksOrder.r
001003  .\code\Remote.r
001002  \\progress\progress$\gui\adm\objects\broker.r
001001  \\progress\company$\Dev\Module\code\HydraLib.r
 

PROPATH:
The propath in use at the time of the crash. This can be used with the ABL stack trace to determine why code in a certain location was run rather than code in another location.
** PROPATH **
\\progress\company$\Dev\Module\code,.,,%dlc%\gui,%dlc%,%dlc%\bin,\\progress\progress$\,\\progress\progress$\gui,\\progress\progr
ess$\gui\adecomm.pl,\\progress\progress$\gui\adecomp.pl,\\progress\progress$\gui\adedesk.pl,\\progress\progress$\gui\adedict.pl,
\\progress\progress$\gui\adeedit.pl,\\progress\progress$\gui\adeicon.pl,\\progress\progress$\gui\aderes.pl,\\progress\progress$\
gui\adeshar.pl,\\progress\progress$\gui\adeuib.pl,\\progress\progress$\gui\adeweb.pl,\\progress\progress$\gui\adexml.pl,\\progre
ss\progress$\gui\dataadmin.pl,\\progress\progress$\gui\prodict.pl,\\progress\progress$\gui\protools.pl,\\progress\progress$\bin,
\\progress\progress$\v9,\\progress\progress$
 

Databases (logical/type/physical)
Databases which the session was connected. This can be used with the ABL stack trace and the debug listing to identify problems with retrieving data. For example, the physical database connected is not the one that was expected.
** Databases (logical/type/physical) **
   Physical            PROGRESS  Dev
 

The Trailer:
Identifies the end of the protrace. If this line is missing, the protrace may not be completely accurate. The protrace code cannot always obtain all the needed information before the crash, but it will do the best it can. Protraces may be produced with missing stack traces, or with invalid C stack traces (Progress Technical Support may determine that a C stack trace is invalid and provide you with instructions for obtaining a valid stack trace). Sometimes protraces are not produced at all.
** End of Protrace **
Workaround
Notes
References to Other Documentation

OpenEdge Development: Debugging and Troubleshooting
OpenEdge Development: ABL Reference, "ABL Syntax Reference > COMPILE statement"

Progress Articles:

 Which directory does Progress generate the core, procore and protraces files in?  
 What is proGetStack?  
 
Last Modified Date11/20/2020 7:35 AM
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.