trace [-help] [-o fname] [-l len] [-p psp] [-abcefinrstvwxy]
[ command options ... ]
Trace is a system utility that produces a listing of the
MS-DOS requests made by a process. It is a useful debugging
tool that can be used on any executable program. Trace can
also be used to provide a better understanding of the inter-
nal workings of many programs. A utility with the same name
and similar functionality is provided with SunOS.
Trace can monitor either a command passed as an argument,
all the resident processes in the system or a process with a
given program segment prefix (PSP). In all cases it creates
a file (trace.log by default) where each system call and its
arguments made by the process(es) monitored are printed. A
number of options control the detail of information printed.
-a Monitor all system calls. By default the following
functions are traced: disp_out (0x02), direct_out
(0x06), disp_string (0x09), flush (0x0d),
set_current_disk (0x0e), get_current_disk (0x19),
set_dta (0x1a), drive_info (0x1c), set_vector (0x25),
parse_name (0x29), get_date (0x2a), get_time (0x2c),
set_time (0x2d), get_dta (0x2f), get_version (0x30),
cntrl_brk (0x33), get_flag (0x34), get_vector (0x35),
mkdir (0x39), rmdir (0x3a), chdir (0x3b), creat (0x3c),
open (0x3d), close (0x3e), read (0x3f), write (0x40),
unlink (0x41), lseek (0x42), chmod (0x43), ioctl
(0x44), dup (0x45), dup2 (0x46), getcwd (0x47), alloc
(0x48), free (0x49), realloc (0x4a), exec (0x4b), exit
(0x4c), get_code (0x4d), findfirst (0x4e), findnext
(0x4f), set_psp (0x50), get_psp (0x51), sysvars (0x52),
child_psp (0x55), get/set_time (0x57),
get/set_alloc_str (0x58), tmpfile (0x5a). create_new
(0x5b). get_psp (0x62), open (0x6c), Functions not
included in the above list are printed by default using
their function number without their arguments.
-b Print the interrupt branch address. Each line is pre-
ceded by the address on which the MS-DOS interrupt was
-c Only a summary count of all calls is produced at the
end of the program run. No detailed information is
given. One line is produced for each function used.
The line contains the function number in hexadecimal,
the symbolic function name and the number of times the
function was called.
-f Calls are prefixed with the MS-DOS function call
-h A short help list on the program options is displayed
on the standard output.
-i Calls are prefixed with the process-id of the process
that performed them. This is the PSP address of the
program under MS-DOS.
-l L Specify the number of bytes printed for input / output
calls. Up to L bytes of data will be printed. The
default number is 15.
-n Functions that are not normally printed are printed by
a short descriptive name rather than their function
-o F The output file for tracing information is F instead of
the default trace.log. Note that F can also be a dev-
ice name such as con or prn.
-p P Trace a process with process-id (PSP address) P. This
is usually a terminate and stay resident (TSR) utility.
To obtain the PSP address of the program use a memory
display utility such as dosmem or mi or run trace with
the -i option.
-r Produce a register dump on functions that do not have
their arguments printed.
-s Print strings on various functions. The functions
+ For all input/output functions follow the function
call with the string that was read or written. The
maximum length of the string is specified with the -l
option. The string is followed by an ellipsis (...)
if it contains more characters than the maximum
length. The default length is 15 characters. Non
ASCII data is not printed unless the -x option is
+ The ioctl calls that get the device mode have it
printed as symbolic constants.
+ The get and set filemode functions have the file mode
printed as a string similar to that produced by the
Unix ls -l command.
+ The directory name returned by the get current
functions are printed together with their associated
-t Prefix all system calls with time in the form of
-v Verbose option. This option will produce the highest
amount of data. It is equivalent to specifying the
-aefinrstwx options. A trace line printed using these
options will resemble the following:
22:11:56 2c40 40 2C50:4B26 write(1, 3200:923E, 1) =
The contents of the line are: the time, PSP address of
the calling process, function call number, address that
generated the function call, the function, its argu-
ments, the return value and the string written.
-w Errors from MS-DOS functions are printed in word form
(i.e. symbolically) rather than as error codes.
-x Data printed under the -s option will be printed even
if it is not ASCII in hexadecimal form.
-y Close log file after every write. Useful for debugging
programs that crash.
D. Spinellis. Trace: A tool for logging operating system
call transactions. Operating Systems Review, 28(4):56-63,
Ralf Brown and Jim Kyle. The PC Interrupt List. Addison-
(C) Copyright 1991, 1994 Diomidis Spinellis. All rights
snail mail: SENA S.A., Kyprou 27, GR-152 37 Filothei,
Most FCB calls and a number of ioctl requests are not
There should be an option to merge consequentive write(2)
The system call used by trace to get the exit code of the
process run is also traced.
Man(1) output converted with