Using TRUSS to troubleshoot OpenEdge
When a program freezes of otherwise fails to work and few clues are given as to the problem, the UNIX
truss command can be used to assist with debugging system problems. Output displays each system call a process performs and the arguments passed.
The Linux equivalents of truss are ltrace and strace. As with any non-Progress utility, refer to the vendor's documentation which would for example be the 'man' pages in this case.
Frequently Progress / OpenEdge processes will spawn (aka fork) sub-processes, in which case a specific switch is needed to follow these.
Simple Example to show how truss captures the directory listing of ls command following sub-processes:
$ truss -f -o ./truss_dirlist.out ls
More practically, using truss to capture the starting/running of an OpenEdge process under investigation, such as when it fails or hangs:
$ truss -aeFf -o ./truss_pidout.txt -p <pid>
$ truss -aef -o ./truss_dbstop.out $DLC/bin/_mprshut -db <dbname> -by -shutdownTimeout immed
$ truss -f -o ./truss_proadsv.out proadsv -port <port_number> -start
$ truss -aeFDd -o /tmp/truss_proadsvDT.out proadsv -start