home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
sd386v50.zip
/
sd386.inf
(
.txt
)
< prev
next >
Wrap
OS/2 Help File
|
1995-03-05
|
107KB
|
3,009 lines
ΓòÉΓòÉΓòÉ 1. Synopsis ΓòÉΓòÉΓòÉ
This document describes how to install and use the SD386 source-level debug
tool for OS/2.
SD386 supports debugging C and PL/X programs running on OS/2 1.x, OS/2 2.x, and
OS/2 Warp platforms. Support is provided for IBM C/2, Microsoft C 6.00, IBM
C/Set-2, and IBM C-Set++ (running C programs). SD386 supports debugging of
DLLs, multi-threaded processes, child processes, and multiple process
applications configured in a parent/child/grandchild heirarchy. SD386 supports
debugging on a single machine or on multiple machines using an asynchronous
null-modem connection, an asynchronous modem-to-modem (phone line) connection,
or a netbios connection over a Lan. SD386 supports Ctrl-Break for breaking into
an application or machine hang to examine threads and determine the cause of
the hang.
ΓòÉΓòÉΓòÉ 2. Introduction ΓòÉΓòÉΓòÉ
SD386 is a debugger for PL/X-86 and C applications running under OS/2 2.x.
SD386 can debug 32-bit, 16-bit, and mixed 16- and 32-bit applications. SD386 is
designed to speed up PL/X-86 and/or C program development.
Using SD386, you can:
o Debug PL/X-86 and/or C source programs.
o Debug OS/2 2.x applications at source level including PM applications.
o Debug OS/2 2.x applications remotely over a com port.
o Debug DLL code at the source level.
o Debug multi-threaded applications.
o Scroll through the HLL (high-level language) source, search for character
strings, or find other separately compiled functions or files.
o View and scroll through the disassembled machine instructions, including
co-processor instructions.
o Set breakpoints at HLL statements or machine instructions.
o Set conditional breakpoints at HLL statements or machine instructions.
o Use hardware debug watchpoints.
o Single-step program execution by HLL statement or machine instruction.
o Display program variables by name (HLL-level) or address (machine-level) and
show the results in hexadecimal, character, decimal, floating point, or
user-defined format.
o View arrays, structs, unions, enums, and arbitrary program-defined types in
C.
o View variables, arrays, structures, and based variables in PL/X-86.
o Expand the view of a structure to include members.
o Expand the view of a multi-dimensional array.
o Modify variables by typing over the displayed values.
o View or change the contents of machine registers.
o View the contents of the co-processor registers.
o Set the currently executing line.
o View the target program's screen at any time during execution.
o View or change the status of the target program's threads.
o Browse any text file.
o View the target program's linked DLLs.
o Select which processor exceptions you wish SD386 to notify you of.
o Debug a child process.
o Debug a multiple process application.
o Ctrl-Break a hung application and examine threads.
o Remote debug a child process.
o Remote debug a multiple process application.
o Remote Ctrl-Break a hung application and examine threads.
ΓòÉΓòÉΓòÉ 2.1. Using the Online Help ΓòÉΓòÉΓòÉ
Help is available as context-sensitive help. Context-sensitive help lets you
access help from any menu choice, window, or field to discover how to use that
particular item.
To access a help screen, use one of the following methods:
o Select choices from the Help pull-down
o Press F1 in any SD386 window
o Press F1 while highlighting any menu bar item
o Press F1 while highlighting any pull-down choice
o Press F1 or select the Help pushbutton in any dialog box.
You can also access most pull-down choices from the keyboard. The keys used to
access the pull-down choices are called shortcut keys and accelerator keys. For
a list of these keys, refer to the online help.
ΓòÉΓòÉΓòÉ 2.2. Version Changes ΓòÉΓòÉΓòÉ
This section lists changes made in various versions.
ΓòÉΓòÉΓòÉ 2.2.1. Version 3.00 ΓòÉΓòÉΓòÉ
o Support for debugging a child process.
o Support for debugging a child process over a null modem connection.
o Support for debugging a child process over a netbios connection.
o Support for debugging a child process over a phone line connection.
o Support for debugging a multiple process application.
o Support for debugging a multiple process application over a null modem
connection.
o Support for debugging a multiple process application over a netbios
connection.
o Support for debugging a multiple process application over a phone line
connection.
o Ctrl-Break support for all child process configurations above.
o Ctrl-Break support for all multiple process application configurations above.
o Support for starting applications using DosExecPgm() instead of
DosStartSession.
o Support for disabling Ctrl-Esc and Atl-Esc access to the desktop when
debugging PM applications.
ΓòÉΓòÉΓòÉ 2.2.2. Version 2.00 ΓòÉΓòÉΓòÉ
o Support for debugging C programs written using C-Set++.
o Support for remote debugging over a com port.
o Addition of an Execution Services Probe(ESP) to the package. This is needed
to support remote debug.
o Addition of a README.DOC to the package for details of version changes.
o Addition of Ctrl-Break handler.
o Addition of /r option to support bit rates from 300 to 38400.
o Addition of /a option to specify the com port for remote debugging.
o Addition of /o option to support remote debugging over a phone line.
o Addition of /p option to read SD386.PRO. This used to be default.
o Addition of /k option for keyboard only input.
o Addition of /u option to not flush the keyboard buffer.
o Addition of /m for viewing imported variables.
o Addition of /s option to allow you to not stop at main.
o Deleted /o option to support old style interface.
o Addition of a go to line number option.
o Addition of a modem.ram file to the package. These are sample dial up
o command files.
o Modifications to cursor sensitive prompting.
o Improvements in the FormatVar pulldown.
o Improvements in the handling of the ALT and ESC keys.
o Improvements in SD386.PRO.
o Numerous bug fixes. See the README.DOC.
ΓòÉΓòÉΓòÉ 2.2.3. Version 1.02 ΓòÉΓòÉΓòÉ
o Addition of a CUA mouse driven interface while maintaining compatibility with
the old style interface.
o Completely revised online help (available with the new interface).
o Fix for intermittant trap C stepping in 16 bit disassembly.
o Fix for display of 16 bit operands in use32 segment.
o Fix for not displaying 16 bit operands in disassembly view.
o Fix for trap when searching for functions with very long names.
o Fix for unwinding 16 bit call stack after an exception.
o Allow for unwinding up to 100 call stack frames (the old limit was 10 which
was much too small for debugging PM apps).
o The addition of some more rigorous algorithms for unwinding call stacks.
o The addition of a "Show All" option to the call stack unwinding dialog. This
option invokes the more rigorous algorithms.
o The addition of a "Show Named" option to the call stack unwinding dialog.
This option invokes the more rigorous algorithm but filters stack frames
without names.
o Fixes for Restart/Quit not cleaning up debuggee.
o Fix for trap D when debuggee gets an access violation at an unknown address.
ΓòÉΓòÉΓòÉ 2.2.4. Version 1.01 ΓòÉΓòÉΓòÉ
o Add watchpoint support with hardware debug registers.
o Debug Microsoft C 6.00 source with multiple code segments.
ΓòÉΓòÉΓòÉ 2.2.5. Version 1.00 ΓòÉΓòÉΓòÉ
o First release.
ΓòÉΓòÉΓòÉ 2.3. Further Information ΓòÉΓòÉΓòÉ
We maintain and monitor the SD86 FORUM on IBMPC. We encourage you to put any
suggestions or questions there.
ΓòÉΓòÉΓòÉ 2.3.1. Credits ΓòÉΓòÉΓòÉ
SD386 is supported by the Software Solutions organization in Lexington, KY.
We would like to thank Jim Christensen, Alan Cole, and David Toll, of the IBM
T.J. Watson Research Lab, Hawthorne, NY, for their invaluable assistance in
producing SD386. Jim and Alan are the primary authors of the predecessor of
SD386. Without them, SD386 would not exist. Also, we would like to thank the
early users of SD386 and its predecessors for their feedback.
ΓòÉΓòÉΓòÉ 2.4. Requirements ΓòÉΓòÉΓòÉ
Hardware
Computer: SD386 supports a computer running OS/2 2.x and runs in a text window
or full screen session.
Software
The following software is required:
o OS/2 2.x
o LOADRAM2 (from OS2TOOLS).
o For PL/X-86 programs: PL/X-86, AL/86, and DebObj. Use the most recent
versions of PL/X-86, AL/86, and DebObj. When checking a potential problem,
determine the version of each tool so CASS support can find out where the
problem is:
Tool Name How to Verify the Version
PL/X-86 Browse the AL/86 output listing file. The version number is in
the last record.
AL/86 Browse the AL/86 output listing file. The version number is in
the next-to-last record.
DebObj On the PC, browse the DebObj output object file. The ASCII
string "DEBOBJ" is near the top of the file. It is followed by
the version number, date, and a 16- or 32-bit designation. Use
the 32-bit DebObj to produce debug info for SD386 to use.
o For 16-bit C programs: IBM C/2 C compiler version 1.1 or Microsoft C
compiler version 4.0 (or beyond). The Microsoft C6.00A compiler seems to
produce more reliable debug information than earlier Microsoft compilers.
o For 32-bit C programs: IBM C Set/2 and IBM C-Set++ compilers.
o You may also use the MASM assembler version 5 (or beyond) for routines called
by your HLL program.
ΓòÉΓòÉΓòÉ 3. What's New for this Release ΓòÉΓòÉΓòÉ
The primary focus of this release is to move OS/2 source level debugging to a
higher level and address the need to debug complex OS/2 applications. Although
many OS/2 applications consist of a single parent process running in a
fullscreen, text, or PM session, there are many applications consisting of
multiple processes running in parent/children/grandchildren or peer-to-peer
configurations on single or multiple machines. Typically, the processes talk to
each other using some form of inter-process communication such as pipes, shared
memory, queues, semaphores, or network connections. While developers have
cleverly managed to debug some of these complex applications by modifying their
code to spawn a debugger which in turn starts the process to be debugged, this
does not always provide a viable solution. The developer may not have access to
the code that needs to be modified, or spawning the debugger may cause the
application to incur certain operating system restrictions that it would not
have otherwise incurred. Hopefully, this release of the SD386 Debugger and its
companion Execution Services Probe(ESP) in conjunction with enhanced remote
connectivity including async, netbios, local pipes, and modem-modem support
will go a long ways toward simplifying the task of debugging these complex OS/2
applications. While SD386 and ESP are somewhat larger, they still retain the
following advantages:
o They are single executables requiring no dlls. (The dll needed for netbios
support is loaded at runtime.)
o There are no message files. All messages are bound to the executables.
o There is no installation. Simply toss the debugger and the probe into your
TOOLS subdirectory. (If you use netbios you will have to install LAPS.)
o Performance is maintained at a high level even for remote debugging
configurations. The probe has been designed to to minimize the impact of a
remote connection on the overall performance of the debugger.
ΓòÉΓòÉΓòÉ 3.1. Single Parent Process Applications ΓòÉΓòÉΓòÉ
The support for multiple processes has also resulted in some enhancements worth
mentioning for single parent process applications.
o You can now debug over a netbios connection. Many workstations have two
machines connected to the lan so it makes sense to let you have a two machine
source level debugging solution. You can use the same remote debugging
methodology that you used for debugging over a null modem connection, or by
adding peer services to get access to your program files you can effectively
have dual screen debugging.
o You can now debug a process when PM is not present. Debuggers usually start
the process to be debugged using DosStartSession(); however,
DosStartSession() is not available before the Session Manager is running so
the debugger cannot start the debuggee process. This release allows you to
start the process using DosExecPgm(). This support has been primarily
intended for customers debugging the OS/2 installation program (who were
previously using the kernel debugger) and for customers debugging the Session
Manager, but general support for DosExecPgm() has been added since there may
be other applications that may benefit.
o You can now ctrl-break into a hung application over a remote connection. The
prior release of SD386 only allowed this for single machines.
o Some other miscellaneous enhancements include a warning when you're starting
a PM app from a text window in a single machine configuration and an option
to turn off Ctrl-Esc and Alt-Esc access to the desktop.
ΓòÉΓòÉΓòÉ 3.2. Typical Solutions Provided by this Release ΓòÉΓòÉΓòÉ
Release 3.00 provides the following solutions:
ΓòÉΓòÉΓòÉ 3.2.1. Debugging a Minimally Booted System ΓòÉΓòÉΓòÉ
Since the last release there has been a need to source level debug the OS/2
installation program(s) that are used to install the operating system from
diskettes.
Diskette 1 of the OS/2 installation diskettes contains a mini version of OS/2
with all the dlls and device drivers necessary to run the install programs
sysinst1.exe and sysinst2.exe. If you examine the config.sys file on diskette
1 you will see the statement:
protshell=sysinst1.exe
which identifies the first application program to be started by OS/2. The
statement:
set os2_shell=sysinst2.exe
defines the default command processor. Changing the protshell statement to:
protshell=cmd.exe
and rebooting will bring up a single fullscreen session and put the machine in
minimally booted state.
If you wanted to debug the initial install program you might enter:
sd386 sysinst1
Unfortunately, this results in a DosStartSession() failure. SD386, by default,
uses DosStartSession() to start the application but DosStartSession() is not a
valid call in a minimally booted system. To fix this, support for starting the
application using DosExecPgm() was added.
However, it turns out that adding the DosExecPgm() support still isn't
sufficient. DosExecPgm() will start the application as a child process of SD386
creating an environment with two processes trying to share the same screen and
keyboard. Obviously, this won't work and necessitates the use of the remote
support to put SD386 in a session of its own (on another machine).
So, in the final analysis, by making a null modem connection between two
machines you can enter:
sd386 /r6 /e sysinst1.exe
on the debugger machine and enter:
esp /r6
on the probe (minimally booted) machine and debug at source level.
Now, if for some reason there were a need to debug both installation programs
simultaneously you could build a process names file (maybe call it "procs")
with the following entries:
sysinst1
sysinst2
You would then enter on the debugger machine:
sd386 /r6 /e /b@procs sysinst1
and on the probe machine you would enter:
esp /r6
SD386 would initially stop at main() in sysinst1.exe. Entering F5 to run would
eventually result in another copy of SD386 being generated for debugging
sysinst2.exe.
ΓòÉΓòÉΓòÉ 3.3. Improved Phone Line Support ΓòÉΓòÉΓòÉ
Phone line support gives you the ability to source level debug your
applications over a standard phone line connection. The Exes and Dlls at the
customer location do NOT have to be linked with debug information. If you keep
a local repository of Exes, Dlls, and source for the release level at the
customer site and if the local Exes and Dlls have been linked with debug info,
the debugger will take execution information from the remote probe (ESP) and
match it up with the information in your local repository. In this way, you can
securely debug your application running in the customer's environment without
exposing your source or executables with debug information. It's not likely
that you will use this support frequently, but there are times when customers
have problems that for one reason or another cannot be reproduced in a simple
test case. During the last year we have successfully used this support in
Lexington to debug some customer problems with our IPMD and EXTRA products.
While this support is not new to this release, some improvements have been made
to make it easier to use. In the last release, you were forced to use a file of
modem commands in conjunction with the /o invocation option to both originate
and answer the call. Now, the file is optional. The debugger (SD386) will by
default send the standard modem commands needed to originate the call and then
prompt you for the phone number. The probe (ESP) will now send the commands to
answer the call.
ΓòÉΓòÉΓòÉ 3.4. Remote Debugging Over The LAN ΓòÉΓòÉΓòÉ
If you're connected to a lan, then you can debug an application running on
another lan attached machine. Here are a few typical configurations:
o If you have two lan attached machines in your office, you can use the lan
connection as an alternative to the null modem cable used between com ports.
The LAN connection will improve the performance of your remote debugging
since the lan connection is a faster interface.
o Since you're attached to the lan you can have a common repository for source
and executable files. This eliminates the need of having to match executables
on the probe machine with the same executables containing debug information
on the debugger machine. Simply set the SD386SRC environment variable on both
the probe and the debugger machine to point to the LAN repository. This
configuration may be used to debug an application running on a machine in a
test lab, another machine in your office, or on the machine of another team
member.
You might want to set up peer services and share files between machines. For
example, you could start a peer server on your development machine and share
your files with a test machine where your application will actually execute.
When you're ready to debug, you can point the SD386SRC environment variable
on the probe machine to the shared files. When you invoke the debugger, the
probe will access executable files back on the development machine. If you
prefer to run the debugger on the test machine, then simply do it, the same
setup will work either way.
You will not need to install anything additional to your LAN software unless
you're using peer services. The debugger and the probe make the connection
between machines using the Netbios api services which come as part of the Lan
Adapter Protocol Support(LAPS) and since LAPS is required as part of the Lan
Requester installation, everything you need should already be installed. If
you're configuring a new machine, however, just for setting up remote
debugging, the Lan Requester is not required...just LAPS.
o If you're going to use peer services, then some installation will be
required. You may want to get your lan administrator to help you with this.
Just to help a bit, I've written down the steps I followed. See Example of
Installing Peer Services for my notes.
ΓòÉΓòÉΓòÉ 3.5. Relief for Message Queue and PM Resource Interlock Hangs ΓòÉΓòÉΓòÉ
There are essentially two types of hangs that you will encounter when debugging
OS/2 applications on a single machine: message queue and PM resource
interlock. In prior releases, you had to be aware of these potential pitfalls
and remember to avoid them. In this release, a small amount of help has been
provided. Of course, the best way to avoid the hangs is to use one of the
remote debugging methods.
A message queue hang occurs when a PM app does not respond to messages from the
operating system. This hang happens as follows. Before the operating system
reports a notification to the debugger, it puts your application to sleep and
waits for the debugger to execute another go or single-step command. While the
PM app is asleep it will not respond to messages from PM so if you Ctrl-Esc or
Alt-Esc to the desktop then the system will lock up waiting for your
application to respond to a message...but it can't, it's asleep. This has been
a problem with debugging PM apps from a fullscreen session since day one, and
although you eventually learn not to go to the desktop from the fullscreen
session, you will inadvertently do it from time to time. This release provides
an invocation option to let you block Ctrl-Esc and Alt-Esc access to the
desktop.
A PM resource interlock occurs when one application holds a PM resource while
another application waits for the resource to become available. The resource is
generally protected with a semaphore and the hang results when one application
blocks holding the semaphore while another application waits for the semaphore
to be posted. The way this type of hang may happen when debugging is as
follows. As in the case of the message queue hang, before the operating system
reports a notification to the debugger it puts your application to sleep. The
application may have been put to sleep holding a PM resource, say a screen
semaphore. If the debugger also needs the resource to service the notification,
say to repaint the screen, then the system hangs. If you start SD386 in a text
window to debug a PM app, you will get this type of hang. If you run SD386 in a
fullscreen session, PM resource interlock is not a problem because SD386
doesn't use any PM resources. A small amount of help is provided by this
release in that you will get a fairly long winded warning if you inadvertently
( or purposely) attempt to debug a PM app from a text window.
ΓòÉΓòÉΓòÉ 3.6. Breaking an Application Hang ΓòÉΓòÉΓòÉ
In the last release, Ctrl-Break support was added to let you break into an
application hang. The application could be blocked in the kernel or simply
stuck in a loop. However, if the entire machine locked up, you couldn't get to
the debugger screen to put in a Ctrl-Break. So, in this release the Ctrl-Break
support has been extended to all remote connections and to all debugging
configurations including parent, child, and multiple process applications? So
now, from a remote connection you should be able to break into an application
hang that also hangs the machine and get some clues about what's causing the
problem.
ΓòÉΓòÉΓòÉ 3.7. Child Process Debugging ΓòÉΓòÉΓòÉ
This release provides support for debugging a child process. Prior releases
only supported debugging a single parent process forcing developers to modify
their code to spawn a debugger that would debug the child process. This
technique has worked quite well; however, there are some problems that may make
the technique unusable.
If the child process was originally spawned using DosExecPgm() then the
debugger has to be the same type of process as the original child. This is a
DosExecPgm() restriction that it can only spawn a process of the same type as
the parent. If the DosExecPgm() is changed to a DosStartSession() then the
parent-child relationship changes. The process started within the child session
is a child of the shell and not the original parent.
In this release, you can simply name the child process that you want to debug
and when your application spawns the child the debugger will get control. You
can proceed with debugging as you would with any parent process. Anything you
can do with a parent process you can do with the child including remote
debugging.
ΓòÉΓòÉΓòÉ 3.8. DosStartSession Returns Codes (RC=127) ΓòÉΓòÉΓòÉ
This release provides some information about the offending module when
DosStartSession() returns with a non-zero return code. In particular, an rc=127
sometimes returns from DosStartSession() when the application is started under
the debugger whereas the program appears to start normally when not started
under the debugger. There is currently a private version of SD386 floating
around that has been used to analyze this rc=127 failure. The private version
is no longer needed.
ΓòÉΓòÉΓòÉ 3.9. Debugging the Session Manager and the Workplace Shell ΓòÉΓòÉΓòÉ
OS/2 normally executes two instances of the PMSHELL.EXE program. If you browse
a typical CONFIG.SYS, you will see the first instance specified by the
PROTSHELL= statement. This is the Session Manager. The second instance
specified by the SET RUNWORKPLACE= statement is the Workplace Shell. If you
replace PMSHELL.EXE on both of these statements with CMD.EXE and reboot the
system, you will come back up in a single OS/2 session. There is no Session
Manager or Desktop. Executing PMSHELL at the initial OS/2 command prompt will
start the Session Manager and bring up a Workplace Shell window. Subsequently
executing PMSHELL in the Workplace Shell window will then bring up the
Workplace Shell.
There is a need to debug these OS/2 components. You can debug the Workplace
Shell by starting PMSHELL under the debugger as follows:
START /FS SD386 PMSHELL
This will start SD386 in a fullscreen session debugging PMSHELL.EXE.
Debugging the Session Manager is a bit more involved in that it presents the
same problems as the minimally booted system discussed previously -
DosStartSession() is not available and using DosExecPgm() results in a trap in
DOSCALL1. To get around the problem you have to use a remote solution. You can
use either an async or a netbios connection. Netbios should be available if you
have previously installed LAPS.
If, for some reason, you wanted to debug both the Session Manager and the
Workplace Shell simultaneously, then you could use a remote connection in
conjunction with the multiple process support.
ΓòÉΓòÉΓòÉ 3.10. Debugging Multiple Process Applications ΓòÉΓòÉΓòÉ
This release gives you the ability to debug multiple process applications on a
single machine or on two machines using a remote async or netbios connection.
You name the processes that you want to debug at invocation time. When your
application spawns one of the processes that you want to debug, a debugger and
a probe will be generated specifically for debugging that process. Debuggers
and probes are not generated for processes which are part of your application
but you choose not to debug.
The connections generated between debuggers and probes will be serial or
parallel, somewhat analogous to the concept of serial and parallel cables. A
netbios connection represents a parallel connection in that each debugger-probe
gets a separate netbios session with its own resources and handles. When
running on a single machine, local pipes are used to provide the parallel
connectivity. The advantage of parallel connectivity is that each
debugger-probe runs independently, i.e., if you start the parent debugger in a
text window, then you will get a new debugger window on your desktop for each
process you've chosen to debug and you can simply click on a window to work
with any given process.
The async connection represents a serial connection. In this case, you have the
additional task of connecting and disconnecting the debuggers since you will
only be able to work with one debugger-probe combination at a time. When you
click on a debugger window, you will notice messages on the debugger status
line indicating the state of the connection.
The glue that binds the debuggers is the new Misc->Process pulldown. From this
pulldown you can select one of the processes you've chosen to debug and it will
take you to the debugger for that process.
While this release provides several angles of attack for your multiple process
debugging requirements, you might want to give strong consideration to using a
remote (preferably netbios) solution for debugging multiple process PM
applications as this is likely to be the best match between the methods
available and the complexity of the task.
ΓòÉΓòÉΓòÉ 4. Before Beginning ΓòÉΓòÉΓòÉ
This chapter explains how to prepare your application for debugging and how to
install SD386.
ΓòÉΓòÉΓòÉ 4.1. Installing SD386 ΓòÉΓòÉΓòÉ
To install SD386, do the following:
1. Download the SD386.RAM file to your PC's hard disk.
2. Execute the following command to unpack the files:
LOADRAM2 SD386.RAM
You should have the following files after unpacking:
SD386.EXE SD386 debugger executable file.
SD386.PRO SD386 debugger profile file.
ESP.EXE Execution Services Probe for remote debugging.
MODEM.RAM Sample command files to use with /o option.
README.DOC Release details.
SD386.INF Documentation to use with view.
3. Define the SD386SRC environment variable if you want SD386 to use it as a
path to your source or executable files. See Customizing the Environment
for more information.
4. Customize the SD386.PRO if you use a profile. If not, simply toss it or put
it somewhere for safe keeping.
ΓòÉΓòÉΓòÉ 4.2. Customizing the Environment ΓòÉΓòÉΓòÉ
The program and the data files must be available to SD386 just as when you run
your program by itself. You can set the SD386SRC environment variable and SD386
will use it to search for executable, source, and text files. SD386 searches
for your program's executable, source, and text files in this order:
1. path specified when entering the filename (browsing and invoking SD386),
e.g.,
c:\test\src\myvars.h
2. the current directory,
3. directory specified to the compiler (if any),
4. the directories specified in the SD386SRC environment variable, and
5. the directories in the system PATH.
The SD386SRC environment variable is meant for use by persons whose source
files are not in the same directory as the resulting object files and are in a
directory that is not in the path. For example, if your source is contained in
C:\MYPROG\SRC and your object and EXE files are in C:\MYPROG\OBJ, and if
\MYPROG\SRC is not in the path and is not the current directory, then you
should set the SD386SRC environment variable to C:\MYPROG\SRC before invoking
SD386. To set or reset this environment variable, enter a command similar to
this one at the OS/2 prompt:
SET SD386SRC=C:\MYPROG\SRC
ΓòÉΓòÉΓòÉ 4.3. Preparing a Program ΓòÉΓòÉΓòÉ
To prepare a program, you must compile and link the program with the proper
options.
ΓòÉΓòÉΓòÉ 4.3.1. Compiling Applications Using IBM C Set/2 Compiler ΓòÉΓòÉΓòÉ
The following options need to be specified for the IBM C Set/2 compiler:
/Ti Include debugging information in the module's run file (.obj).
/O- Disable optimization.
Note: Optimized code tends to have code movement which makes it
difficult to associate machine code reliably with its corresponding
source line number. Therefore, we suggest that initial testing and
debugging of a module be on non-optimized code.
Note: You may also wish to use the Extra execution trace analysis
tool to analyze the behavior of your IBM C Set/2 programs. To do
so:
/Gh Include the hook code to allow Extra to monitor your module. This
option has no effect on SD386.
ΓòÉΓòÉΓòÉ 4.3.2. Compiling Applications Using Microsoft C Compiler ΓòÉΓòÉΓòÉ
The following options need to be specified for the Microsoft C compiler:
/Zi Include debugging information in the module's run file (.obj).
/Od Disable optimization.
Note: Do not use the quick compile or incremental link options
with Microsoft C.
Note: Optimized code tends to have code movement which makes it
difficult to associate machine code reliably with its corresponding
source line number. Therefore, we suggest that initial testing and
debugging of a module be on non-optimized code.
ΓòÉΓòÉΓòÉ 4.3.3. Compiling Applications Using PL/X-86 Compiler ΓòÉΓòÉΓòÉ
The following options need to be specified for the PL/X-86 compiler:
LOGIC Include debugging information in the module's SYSLOGIC file.
ΓòÉΓòÉΓòÉ 4.3.4. Linking a Program ΓòÉΓòÉΓòÉ
The Link386 options are:
/CO or /DE This causes the linker to include debugging information in the
application's run file (.EXE or .DLL).
ΓòÉΓòÉΓòÉ 5. Getting Started ΓòÉΓòÉΓòÉ
This chapter discusses how to start and use SD386. It describes the SD386
windows and menus.
ΓòÉΓòÉΓòÉ 5.1. Starting SD386 ΓòÉΓòÉΓòÉ
To start SD386 from the OS/2 command prompt, enter the SD386 command, any SD386
options, and the command you normally use to run your program. For example, if
you type
filename input.dat /fileopt
to run your program, then to run your program under the control of SD386, you
would type the following and then press Enter.
SD386 filename input.dat /fileopt
The full description of the command syntax is:
SD386 [Options] [Program Name] [Program Arguments]
options may be any of the following. Each option must be prefaced with a
dash (-) or a slash (/).
/h or /? Print this help screen.
/p Read SD386.PRO.
/c Force case sensitivity for public names.
/i Debug initialization code.
/f Run debuggee in full screen session.
/w Run debuggee in text window session.
/k Keyboard only (no mouse).
/u Do not flush keyboard buffer.
/m Resolve imports.
/oFilespec Makes a phone line connection to a remote esp. (See notes
regarding optional Filespec.)
/r[n] Remote debug:
n=0 1 2 3 4 5 6
speed=300 1200 2400 4800 9600 19200 38400
/an Which Com(Async) port. For example, /a1 uses COM1:
/s Don't stop at "main" entry point.
/e Use DosExecPgm() to start the debuggee.
/b[@]Filespec Debug the child process specified by Filespec. If Filespec is
prefixed with @, then debug all the precesses specified (one per
line) in the file.
/nAname Remote debug over a netbios connection. Aname is any logical name.
Use the same name on both the debug and the probe machines.
/x Disable Ctrl-Esc and Atl-Esc. If abnormal termination leaves
Ctrl-Esc and Atl-Esc disabled, then SD386 /x will turn them back
on.
program name the name of the EXE file you wish to debug.
SD386 will attempt to set the first breakpoint at the address of
the main function of your program. Note that special start-up and
initialization code can get in the way of this process.
For C programs, the standard C arguments argc, argv, and envp
will be passed to your program. The same is true for PL/X-86
programs that use the C run-time library. PL/X-86 programs that
are not using the C run-time library should use the DosGetEnv API
to get the invocation parameters and environment.
arguments lists the standard input character strings passed to the main
procedure or function.
Note: You should run SD386 from a full-screen session if you are debugging a
PM application. This lessens the chance of a lockup due to PM message queue
traffic problems. See Presentation Manager Limitations for more information.
Note: The correspondence between machine code and source file line number is
taken from the object file when this information is generated by the /Zd or /Zi
option (for MS C), the /Ti option (for IBM C Set/2) or by the LOGIC option (for
PL/X-86). The debugger is only as accurate as the information provided by the
compiler.
After some initialization, SD386 displays its screen. The screen contains the
menu bar and the Source window. From this window, you can perform all of the
SD386 debugging functions as well as invoke the other windows.
Note: Online help is available throughout SD386 for each window, menu, and
pulldown option. You can get help from the Help pulldown menu or by pressing
F1.
ΓòÉΓòÉΓòÉ 5.2. Using the Source Window ΓòÉΓòÉΓòÉ
The Source window is the main window of SD386 and displays the source code for
the module you are debugging. When you start SD386, it sets a breakpoint at the
main entry point of your program (unless you have asked SD386 to debug
initialization code with the /i option). Executable lines are highlighted and
non-executable lines are not highlighted. The line that is about to be executed
and lines with breakpoints set on them are shown with different background
colors. Combinations of these attributes can occur for a breakpoint line at
which execution is currently halted. In these cases, SD386 mixes the two
attributes as appropriate.
Note: You can change the color settings for the various fields in the Colors
pulldown in the Settings menu. The color options are described in Colors.
ΓòÉΓòÉΓòÉ 5.3. Interacting with SD386 ΓòÉΓòÉΓòÉ
You interact with SD386 by using the keyboard and/or the mouse. SD386 has a
full set of accelerator keys for menus and pulldowns. SD386 functions primarily
from the Source window and the Menu Bar. Other windows can be popped up or
pulled down as appropriate. The Data window can share the screen with the
Source window and can be sized appropriately.
ΓòÉΓòÉΓòÉ 5.4. Using the Menu Bar ΓòÉΓòÉΓòÉ
The Menu Bar contains most of the debugging functions of SD386. You can get to
the Menu Bar with the mouse or with the accelerator key F10. The ExpressBar
function (default Esc key) will take you immediately to the File pulldown. The
Menu Bar is divided into several menus. Each of these menus has pulldowns
containing the various functions. Accelerator keys are available for most of
the pulldowns. The menus and their pulldowns are discussed in detail in Menu
Bar Functions.
ΓòÉΓòÉΓòÉ 6. Menu Bar Functions ΓòÉΓòÉΓòÉ
This chapter discusses the functions available in the Menu Bar. They are
discussed in the same order as they appear in the Menu Bar. This information is
also available in the online context-sensitive help for each pulldown menu.
ΓòÉΓòÉΓòÉ 6.1. File Pulldown ΓòÉΓòÉΓòÉ
The File pulldown contains functions dealing with getting and finding
debuggable things (functions, addresses, files, and the execution point),
moving around the ring of files, and restarting or exiting SD386. Here are the
functions available on the File pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Get Function... Γöé Locates the source file for a function. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Get Address... Γöé Locates an address. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Get File... Γöé Opens a source file. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Find Function Γöé Locates the source file for a function. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Find Exec Line Γöé Locates the current execution line. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Next File Γöé Gets the next file in the source file ring. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Drop File Γöé Drops the current file from the source file Γöé
Γöé Γöé ring. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Browse File... Γöé Browses a file. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Restart Γöé Restarts the target application. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Quit Γöé Ends the debugger. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.1.1. Get Function ΓòÉΓòÉΓòÉ
Locates the source file that contains the definition of the function you
specify and adds the source file to the ring of source files.
Once a DLL is attached, you can use Get Function to display the source for the
DLL's functions. For run-time DLLs, the DLL is not attached until the
DosLoadModule function has been executed.
To get around this constraint for run-time DLLs, i.e., to be able to view
source, set breakpoints, etc., before the DLL is attached, you can force the
DLL to be attached at start-up time by importing one of the function names in
the module definition file for the EXE file. For example:
NAME EXENAME
PROTMODE
IMPORTS
FUNCNAME=DLLNAME.FUNCNAME
Note: This should be a temporary import for debugging purposes only. It does
change your DLL from being a run-time DLL to being statically linked.
SD386 allows you to use Get Function even if the main EXE file is not linked
with debug info. This allows you to debug a DLL that is linked with debug info
from an EXE that is not linked with debug info.
See Debugging DLLs for more info about debugging dynamically linked (run-time)
DLLs.
ΓòÉΓòÉΓòÉ 6.1.2. Get Address ΓòÉΓòÉΓòÉ
Locates the source file and line number containing the specified address and
adds the source file to the ring of files. If source is not available then a
disassembly view will be shown.
ΓòÉΓòÉΓòÉ 6.1.3. Get File ΓòÉΓòÉΓòÉ
Locates the file specified looking first in the ring of files and then in the
list of files linked with the /CO or /DE debug option. Get File also adds the
specified source file to the ring. After adding a source file to the ring with
Get File, SD386 treats it like any other source file. You can set breakpoints
and perform any of the other source functions of SD386 in the file.
ΓòÉΓòÉΓòÉ 6.1.4. Find Function ΓòÉΓòÉΓòÉ
Locates the source file that contains the function on which the cursor is
placed and adds the source file to the ring of source files.
ΓòÉΓòÉΓòÉ 6.1.5. Find Exec Line ΓòÉΓòÉΓòÉ
This function brings the currently executing line (Exec Line) into view and
places the cursor on that line. If the cursor is already on the Exec Line,
then this function will take you to the next line to be executed in the
previous stack frame and place the cursor on that line. Subsequent executions
will continue to take you to previous stack frames until you return to the Exec
Line. Effectively, this function lets you walk the stack in a ring like fashion
adding a file for each stack frame to the ring of files.
ΓòÉΓòÉΓòÉ 6.1.6. Next File ΓòÉΓòÉΓòÉ
Switches to the next file in the ring of source files.
ΓòÉΓòÉΓòÉ 6.1.7. Drop File ΓòÉΓòÉΓòÉ
If the current file does not define the currently executing procedure, then
Drop File will remove the file from the ring of files.
ΓòÉΓòÉΓòÉ 6.1.8. Browse File ΓòÉΓòÉΓòÉ
Loads a file for browsing.
The Browse window provides a set of simple file browsing functions. As in a
typical file browser, you can move up and down in the file. You can also locate
text.
To enter the Browse window, press F11 in the Source or Data window or use the
Browse pulldown in the File menu. SD386 presents a prompt for you to fill in
the name of a file to be browsed. You can enter a simple filename or provide a
path with the filename. Press F1 while on the prompt line for an explanation of
the search order for the text file.
Browse Window Keyboard Functions
Key Input If you want to
Down Arrow Cursor down one line.
Up Arrow Cursor up one line.
PgDn Scroll down.
PgUp Scroll up.
Ctrl-PgDn Bot of screen.
Ctrl-PgUp Top of screen.
Ctrl-Home Top of file.
Ctrl-End End of file.
/ or F Find.
R Repeat find.
Esc Leave browse.
F1 Help.
ΓòÉΓòÉΓòÉ 6.1.9. Restart ΓòÉΓòÉΓòÉ
Reloads and restarts the target application. Breakpoints and the contents of
the Data window are retained. Data items from DLLs are removed because their
status after a restart is uncertain.
ΓòÉΓòÉΓòÉ 6.1.10. Quit ΓòÉΓòÉΓòÉ
Ends the debugger. When debugging remote, you will be given the option to
terminate the Execution Services Probe(ESP.EXE).
ΓòÉΓòÉΓòÉ 6.2. Run Pulldown ΓòÉΓòÉΓòÉ
The Run pulldown contains functions for running and single stepping the target
application. Here are the functions available on the Run pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Run Γöé Runs the target program. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Single Step Γöé Executes the current line. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Step Into Γöé Steps into a function call. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Run To Cursor Γöé Runs up to the cursor line. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Run NoSwap Γöé Runs the program, no screen swap. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Single Step NoSwap Γöé Executes the current line, no screen swap. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Step Into NoSwap Γöé Steps into a function, no screen swap. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Run To Cursor NoSwap Γöé Runs up to the cursor line, no screen swap. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Set Exec Line Γöé Sets current line as the next executable. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.2.1. Run ΓòÉΓòÉΓòÉ
Runs the program until a breakpoint is hit, an exception occurs, or the end of
the program is reached.
ΓòÉΓòÉΓòÉ 6.2.2. Single Step ΓòÉΓòÉΓòÉ
Executes the current source line (as defined by your compiler). If the current
line calls other procedures, they will executed but will not be traced. Use
the Step Into function to trace calls to other procedures as well.
ΓòÉΓòÉΓòÉ 6.2.3. Step Into ΓòÉΓòÉΓòÉ
Executes the current source line. If the current line calls other procedures,
they will also be traced.
Note: When you step into a function, parameters and the call stack will not be
displayed correctly until the function prologue code is executed. This
generally involves stepping one additional statement.
ΓòÉΓòÉΓòÉ 6.2.4. Run To Cursor ΓòÉΓòÉΓòÉ
Sets a one-time breakpoint on the line containing the cursor and executes the
program. If the cursor line is not hit during the run, a one-time breakpoint
is set on the line to be hit on the next run.
ΓòÉΓòÉΓòÉ 6.2.5. Run NoSwap ΓòÉΓòÉΓòÉ
Runs the program in the background until a breakpoint is hit, an exception
occurs, or the end of the program is reached.
ΓòÉΓòÉΓòÉ 6.2.6. Single Step NoSwap ΓòÉΓòÉΓòÉ
Executes the current source line (as defined by your compiler) in the
background. If the current line calls other procedures, they will executed but
will not be traced. Use the Step Into function to trace calls to other
procedures as well.
ΓòÉΓòÉΓòÉ 6.2.7. Step Into NoSwap ΓòÉΓòÉΓòÉ
Executes the current source line in the background. If the current line calls
other procedures, they will also be traced.
ΓòÉΓòÉΓòÉ 6.2.8. Run To Cursor NoSwap ΓòÉΓòÉΓòÉ
Sets a one-time breakpoint on the line containing the cursor and executes the
program in the background. If the cursor line is not hit during the run, a
one-time breakpoint is set on the line to be hit on the next run.
ΓòÉΓòÉΓòÉ 6.2.9. Set Exec Line ΓòÉΓòÉΓòÉ
Sets the current execution line to the line containing the cursor.
ΓòÉΓòÉΓòÉ 6.3. Breakpoints Pulldown ΓòÉΓòÉΓòÉ
The Breakpoints pulldown contains functions for setting and clearing various
kinds of breakpoints. Here are the functions available on the Breakpoints
pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Set/Clear on Cursor Γöé Sets a breakpoint at the cursor. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Set Conditional on Cursor... Γöé Sets a cond'l breakpoint at the cursor. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Function entry... Γöé Sets a breakpoint on a function. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Address... Γöé Sets a breakpoint on an address. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Clear All Breaks Γöé Clears all breakpoints. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Hardware Debug Regs... Γöé Sets watchpoints. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.3.1. Set/Clear on Cursor ΓòÉΓòÉΓòÉ
Sets or resets a breakpoint on the line selected by the cursor. Only
highlighted lines (as determined by the line numbers generated by your
compiler) may be selected. Clearing a breakpoint from this screen clears all
breakpoints for that line.
If debugging at source level, you may notice that not all lines may be selected
for breakpoints. This is due to your compiler, which generates a table of line
numbers versus module addresses. The debugger can set breakpoints only on those
lines that have an entry in this table (for example, you cannot set breakpoints
on comments, some declarations, some terminating braces, nor various other
places).
Note: See Notes for PL/X-86 Programs for exceptions to these rules.
ΓòÉΓòÉΓòÉ 6.3.2. Set Conditional on Cursor ΓòÉΓòÉΓòÉ
Sets a conditional breakpoint on the line selected by the cursor. Only
highlighted lines (as determined by the line numbers generated by your
compiler) may be selected. Clearing a breakpoint from this screen clears all
breakpoints for that line.
Your program does not always stop at a conditional breakpoint. It stops only
when the condition that you specify is true. You might, for example, want to
stop in a program loop only after 50 iterations. You could specify a breakpoint
with something like i > 50 as the condition, where i is a loop counter used in
your program. Note that the condition is evaluated each time control reaches
the breakpoint.
The condition should be in the following form:
<variable> <operator> <constant>
where:
<variable> is a variable or register expression;
<operator> is one of <, >, ==, <=, >=, or !=;
<constant> is a constant expression.
Refer to Formulas and Expressions for a complete description of expressions.
ΓòÉΓòÉΓòÉ 6.3.3. Function Entry ΓòÉΓòÉΓòÉ
Sets a breakpoint on a function by name. If the name is not know by the
debugger, as might be the case when debugging dynamically loaded or load on
call dlls, then you will be given the option to defer the breakpoint until the
dll is loaded. This is a feature of SD386 generally referred to as "deferred
breakpoints."
ΓòÉΓòÉΓòÉ 6.3.4. Address ΓòÉΓòÉΓòÉ
Sets a breakpoint on a given address.
ΓòÉΓòÉΓòÉ 6.3.5. Clear All Breaks ΓòÉΓòÉΓòÉ
Clears all breakpoints in the target program. This clears all types of
breakpoints in the target program.
ΓòÉΓòÉΓòÉ 6.3.6. Hardware Debug Registers ΓòÉΓòÉΓòÉ
Brings up the watchpoint menu, which allows you to enter expressions for up to
4 watchpoints. These watchpoints use the hardware debug registers of the Intel
chip. See Watchpoint Window Details for details.
ΓòÉΓòÉΓòÉ 6.4. Search Pulldown ΓòÉΓòÉΓòÉ
The Search pulldown contains functions for locating text strings. Here are the
functions available on the Search pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Find... Γöé Finds a specified string in the current Γöé
Γöé Γöé source file. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé RepeatFind Γöé Repeats the previous find command. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.4.1. Find ΓòÉΓòÉΓòÉ
Find searches the current source file for a string. The find function
highlights the found string and indicates when it wraps from the bottom to the
top of the file. You can use a "/" as an express key to the Find dialog.
Subsequently, you can use "R" as an express key for a repeat find.
ΓòÉΓòÉΓòÉ 6.4.2. RepeatFind ΓòÉΓòÉΓòÉ
Repeats the find command with the previous string entered. You can use "R" as
an express key for a repeat find.
ΓòÉΓòÉΓòÉ 6.5. Data Pulldown ΓòÉΓòÉΓòÉ
The Data pulldown contains functions that deal with items in the Data window.
Details about the Data window, formulas and expressions, formula syntax, data
formats, and data expansion are in Data Window Details. Here are the functions
available on the Data pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Show Var Γöé Shows the value of the variable at the Γöé
Γöé Γöé cursor. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Show Var-> Γöé Shows the contents of the pointer variable Γöé
Γöé Γöé selected by the cursor. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Watch Var Γöé Adds the variable to the Data window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Watch Var-> Γöé Adds the contents of the pointer variable to Γöé
Γöé Γöé the Data window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Expand Var Γöé Expands the variable in the Data Expansion Γöé
Γöé Γöé window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Edit Expression Γöé Edits the expression. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Edit Storage Γöé Edits the storage displayed in the Data Γöé
Γöé Γöé window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Format Var Γöé Shows menu bar of choices for the format of Γöé
Γöé Γöé the display of the data. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Remove Var Γöé Removes a variable from the Data window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Insert Γöé Inserts a variable in the Data window. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.5.1. Show Var ΓòÉΓòÉΓòÉ
Shows the value of the variable selected by the cursor. The variable is
displayed at the bottom of the Source window.
ΓòÉΓòÉΓòÉ 6.5.2. ShowVar-> ΓòÉΓòÉΓòÉ
Shows the contents of the pointer variable selected by the cursor. The variable
is displayed at the bottom of the Source window.
ΓòÉΓòÉΓòÉ 6.5.3. Watch Var ΓòÉΓòÉΓòÉ
Adds the variable selected by the cursor to the Data window.
ΓòÉΓòÉΓòÉ 6.5.4. Watch Var-> ΓòÉΓòÉΓòÉ
Adds the pointer variable selected by the cursor to the Data window.
ΓòÉΓòÉΓòÉ 6.5.5. Expand Var ΓòÉΓòÉΓòÉ
Expands the view of a variable such as a member of a structure or union. If
the member is a structure or union, its components will be displayed in the
Data Expansion window. If the member is a pointer to another structure, etc.,
the contents of the variable pointed to by the pointer will be displayed in the
Data Expansion window.
ΓòÉΓòÉΓòÉ 6.5.6. Edit Expression ΓòÉΓòÉΓòÉ
Allows you to edit the expression (formula) which defines what is displayed by
SD386. One you have changed the expression, press Enter to cause SD386 to
handle the expression or press Esc to leave the expression alone.
ΓòÉΓòÉΓòÉ 6.5.7. Edit Storage ΓòÉΓòÉΓòÉ
Allows you to edit the value of the storaged displayed by SD386. Once you have
changed the value, press Enter to alter the actual contents of memory or press
Esc to leave the contents alone.
ΓòÉΓòÉΓòÉ 6.5.8. Format Var ΓòÉΓòÉΓòÉ
Formats a variable in the Data window according to the format specified. A
menu will be displayed to choose default formats or enter the format type of
the variable.
ΓòÉΓòÉΓòÉ 6.5.9. Remove Var ΓòÉΓòÉΓòÉ
Removes the variable selected by the cursor from the Data window.
ΓòÉΓòÉΓòÉ 6.5.10. Insert ΓòÉΓòÉΓòÉ
Inserts the variable selected by the cursor in the Data window.
ΓòÉΓòÉΓòÉ 6.6. View Pulldown ΓòÉΓòÉΓòÉ
The View pulldown contains functions dealing with windows and views within the
Source window. Here are the functions available on the View pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Source Γöé Switches to source view. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Assembler Γöé Switches to assembly view. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Data Γöé Switches to the Data window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Data Show/Hide Γöé Display/Hide the Data window. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Timed Show App Γöé Shows the application screen for few seconds. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.6.1. Source ΓòÉΓòÉΓòÉ
Switches to the source view in the Source window. This option is disabled if
the current view is already the source view.
ΓòÉΓòÉΓòÉ 6.6.2. Assembler ΓòÉΓòÉΓòÉ
Switches to the assembly view in the Source window. This option is disabled if
the current view is already the assembly view.
ΓòÉΓòÉΓòÉ 6.6.3. Data ΓòÉΓòÉΓòÉ
Switches to the Data window. This option is disabled if the current window is
already the Data window.
ΓòÉΓòÉΓòÉ 6.6.4. Data Show/Hide ΓòÉΓòÉΓòÉ
This command toggles between showing and hiding the Data window. The contents
of the Data window remain unchanged.
ΓòÉΓòÉΓòÉ 6.6.5. Timed Show App ΓòÉΓòÉΓòÉ
This command shows the application screen for a few seconds. It returns back to
the previous view.
ΓòÉΓòÉΓòÉ 6.7. Settings Pulldown ΓòÉΓòÉΓòÉ
The Settings pulldown contains functions dealing with the various settings you
can select within SD386. Here are the functions available on the Settings
pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Colors Γöé Sets colors for various screen items. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Exceptions Γöé Sets various exception notifications. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Assembler +/- Source Γöé Sets type of assembly view. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Mnemonics Γöé Sets the disassembly option. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.7.1. Colors ΓòÉΓòÉΓòÉ
Sets the colors for the various screen areas. You can choose colors, reset to
default colors, and optionally save color settings to the SD386 profile.
Use the mouse or keyboard to select the field(s) you wish to change and to
cycle through the various choices for foreground and background color. SD386
shows you what the field looks like with each combination.
ΓòÉΓòÉΓòÉ 6.7.2. Exceptions ΓòÉΓòÉΓòÉ
Allows you choose whether to be notified or not for various processor and
operating system exceptions. These are exceptions which your target program
receives from OS/2.
Use the mouse or keyboard to move to any of the given exception definitions.
Once you have selected an exception, you can toggle the SD386 notification for
that exception to Notify/Nonotify, set all exceptions to their default values,
save your selections in the SD386 profile, and/or set your current selections.
More information is in Exception Window Details.
ΓòÉΓòÉΓòÉ 6.7.3. Assembler +/- Source ΓòÉΓòÉΓòÉ
Sets the assembler view option. This option toggles between mixed
source/assembly and assembly only views.
ΓòÉΓòÉΓòÉ 6.7.4. Mnemonics ΓòÉΓòÉΓòÉ
This command sets the type of disassembly. This option toggles between Intel
or AL/86 instructions.
ΓòÉΓòÉΓòÉ 6.8. Misc Pulldown ΓòÉΓòÉΓòÉ
The Misc pulldown contains various SD386 functions that don't fit in any of the
other menus. Here are the functions available on the Misc pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé CallStack Γöé List of active procedures. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Threads Γöé List of active threads. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Processes Γöé List of activity. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Dlls Γöé List of DLLs for the application. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Registers Γöé Register display. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Edit Registers Γöé Modify register contents. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Co-processor Regs Γöé Co-processor register display. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.8.1. CallStack ΓòÉΓòÉΓòÉ
This command displays the list of active procedures and allows you to unwind
the call stack to a selected procedure.
ΓòÉΓòÉΓòÉ 6.8.2. Threads ΓòÉΓòÉΓòÉ
Displays the status of all active threads and allows you to examine and/or
modify their current status. See Thread Window Details for more information.
ΓòÉΓòÉΓòÉ 6.8.3. Dlls ΓòÉΓòÉΓòÉ
Displays the list of Dynamic Link Libraries used by the target application.
ΓòÉΓòÉΓòÉ 6.8.4. Registers ΓòÉΓòÉΓòÉ
Displays the processor registers and their values. This list is updated at
each instruction step.
ΓòÉΓòÉΓòÉ 6.8.5. Edit Registers ΓòÉΓòÉΓòÉ
This command allows you to edit the contents of the registers.
ΓòÉΓòÉΓòÉ 6.8.6. Co-processor Regs ΓòÉΓòÉΓòÉ
Displays the co-processor registers, stack, and their values. This list is
updated at each instruction step. See Co-processor Window Details for more
information.
ΓòÉΓòÉΓòÉ 6.9. Help Pulldown ΓòÉΓòÉΓòÉ
The Help pulldown contains help for SD386 and its user interface. Here are the
functions available on the Help pulldown:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé PULLDOWN Γöé ACTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé General Help Γöé Display general information about SD386 Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Keys Help Γöé Display the various key assignments. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 6.9.1. General Help ΓòÉΓòÉΓòÉ
SD386 is a source-level debugger for OS/2. It debugs programs compiled with IBM
C Set/2, IBM C-Set++, Microsoft C, or PL/X-86. SD386 debugs 32-bit, 16-bit, and
mixed 16- and 32-bit applications. SD386 has full keyboard and mouse support.
It has a full set of accelerator keys. It has an menu bar with these
pull-downs:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé MENU Γöé DESCRIPTION Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé File Γöé File functions, browse, restart, & quit. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Run Γöé Execute the target application in various ways. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Breakpoints Γöé Set/clear various kinds of breakpoints. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Search Γöé Text string search functions. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Data Γöé Watch, show, expand, and edit data items. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé View Γöé SD386 window selection. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Settings Γöé Colors, exceptions, assembler settings. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Misc Γöé Call stack, thread, DLL, and register info. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Help Γöé Display general and keyboard help information. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
You can use the mouse or keyboard to select a line in the source window. Click
the right mouse button on a line to bring up a menu of functions available for
that line. Generally, you can use the mouse anywhere you can use the keyboard.
Use the up and down arrows on the menu bar to change the size of the Data
window.
ΓòÉΓòÉΓòÉ 6.9.2. Keys Help ΓòÉΓòÉΓòÉ
Displays a list of your current accelerator key settings.
ΓòÉΓòÉΓòÉ 7. SD386 Window Details ΓòÉΓòÉΓòÉ
In the following sections, each of the windows is discussed in detail.
ΓòÉΓòÉΓòÉ 7.1. Data Window Details ΓòÉΓòÉΓòÉ
You have already seen an example of the Data window that appears at the top of
the debugger's screen. When you enter this area with the Data pulldown in the
View menu, you can edit the formulas and the displayed storage. Use the Data
function (default key F2) again to leave this area.
SD386 uses two different colors for the Source and Data windows. When the Data
window is active, i.e., the cursor is in the Data window, an extra colored line
separates the two windows. This information line also tells you which line in
the Data window the cursor is on.
If the Data window is size zero (its initial size), then the Data function
toggles between a Data window of maximum and minimum size. You may view both
data and code at the same time by using the arrows on the Menu Bar to expand or
shrink the Data window.
To make changes to the Data window, place the cursor in the Data window. Then
use the cursor and tab keys to move the cursor to the area you wish to change.
ΓòÉΓòÉΓòÉ 7.1.1. Formulas and Expressions ΓòÉΓòÉΓòÉ
Formulas and expressions can involve variable names as long as these variables
are known to SD386. Which variables are known depends on the compiler used.
If you use the IBM C Set/2 compiler with the /Ti option or the Microsoft C
compiler with the /Zi option, then all functions, variables, and parameters are
known to the debugger. The type of each variable is known whether it is a
simple type, struct, union, enum, or user-defined typedef.
If the PL/X-86 compiler and AL/86 assembler are used with the LOGIC option,
then many variables are known to SD386. See Notes for PL/X-86 Programs for a
list of types of variables which are unknown.
Note: You can select variables to be viewed or watched with the Show Var, Show
Var->, Watch Var, and Watch Var-> functions in the Source window. See Data
Pulldown for more details about these functions. These functions work on
non-executable as well as executable lines. So, you can place your cursor on a
variable name on its declaration line in your source code and view it with one
of the functions mentioned.
ΓòÉΓòÉΓòÉ 7.1.1.1. Formula Syntax ΓòÉΓòÉΓòÉ
Formulas in the Data window and expressions in other debugger contexts are
composed of:
o variable names known to SD386
o the Intel register names ax, bx, cx, dx, si, di, bp, sp, ds, es, ss, cs, ip
o the Intel register names eax, ebx, ecx, edx, esi, edi, ebp, esp, eip
o numeric constants, decimal or hexadecimal (see below)
o the plus (+) and minus (-) operators
o the multiply (*) operator
o the unary pointer dereference (*) operator (only at the start of the formula)
o the address of (&) operator (only at the start of the formula)
o the pointer operator (->)
o the member operator (.) to display members of structs or unions
o the subscript operator ([]). Subscripts must be constants or simple
variables; they may not be expressions or complex variables.
Note: For help with formulas, SD386 has a context-sensitive help feature.
While you are typing the formula, you can press F1 and SD386 displays detailed
information about what you're allowed to put in the formula.
Note: Support for PL/X-86 expressions is limited. PL/X-86 users should use
this C-like formula syntax for simple PL/X-86 variables and constants.
When SD386 evaluates a formula, variable and parameter names evaluate to their
addresses, register names evaluate to the contents of the named register, and
constants evaluate to integers. A formula yields an address only if a segment
is given (e.g., ss:esp) or implied through use of a variable or parameter name.
Formulas with no segment (e.g., ax+1) yield scalar values.
Parentheses are not allowed and all operators have equal precedence.
Expressions are evaluated from left to right except that a pointer dereference
operator is done last (i.e., it applies to the address specified by the rest of
the formula).
Beware that this differs from the way that the C language interprets
expressions. For example, if array is an array of characters, array+2 refers to
the 2nd byte beyond array (as in C), and i+2 refers to the 2nd byte beyond i
(whereas the C interpretation of i+2 is the value of i plus 2).
Notice that although the area of the display devoted to the formula provides
only a ten-character field, you may type expressions up to 46 characters long.
When you type Enter, the display field will be truncated to ten characters, but
the displayed value will still be correct. To see the full underlying formula,
move the cursor to that line and type a left or right cursor key.
SD386 accepts simple variable names, i.e., variables which are chars, ints,
etc., as array indices. For example, SD386 can evaluate array[myint] just like
it evaluates array[3].
ΓòÉΓòÉΓòÉ 7.1.1.2. Numeric Constants in Debugger Expressions ΓòÉΓòÉΓòÉ
Numbers may be treated as either decimal or hexadecimal in expressions parsed
by SD386. The rules are as follows:
1. A "0x" forces the number to be treated as hexadecimal. For example, the
number "0x10" is hexadecimal 10 (decimal 16).
2. Any number appearing in an expression which contains a colon (":") is
treated as hexadecimal. For example, in the following expression
47:5c+4
both the 5c and the 4 are treated as hex.
3. Any other number is treated as a decimal number. For example, the
expression "alphabet[25]" treats the 25 as a decimal subscript.
ΓòÉΓòÉΓòÉ 7.1.2. How Variables are Displayed ΓòÉΓòÉΓòÉ
SD386 displays various variable types in default formats. You can change the
display format for each variable. See Data Display Format Options for
information. The default formats are:
Variable Type Display Format
Char Hex value followed by ASCII character in quotes
Int Two-byte decimal and corresponding hex value
Long Four-byte decimal and corresponding hex value
Float Four-byte floating-point
Double Eight-byte floating-point
Ptr Selector:Offset => contents
Char array Hex value (16 bytes per line) followed by corresponding ASCII
chars
Int array [Element number] followed by decimal contents - one element
per line
Struct, union membername: contents as above - one member per line
ΓòÉΓòÉΓòÉ 7.1.3. Hiding the Data Window ΓòÉΓòÉΓòÉ
The Data window and its contents can be hidden and re-shown with the Data
Show/Hide pulldown on the View menu.
ΓòÉΓòÉΓòÉ 7.1.4. Data Display Format Options ΓòÉΓòÉΓòÉ
You can choose to display a data item in one of several formats with the Format
Var function. To bring up the Format Var menu of format choices, put the cursor
in the Data window under the name of the data item you wish to format and press
C_Enter or use the mouse to select Format Var in the Data pulldown.
The options for formatting the display of a variable are:
Hex Displays storage as a sequence of hexadecimal bytes.
Char Displays a variable as a single ASCII character.
Int Displays a variable as a decimal (2-byte) integer.
Long Displays a variable as a decimal (4-byte) integer.
Float Displays a variable as a floating point (4-byte) number.
Double Displays a variable as a double-precision (8-byte) floating point
number.
(.native) This option's actual wording depends on the type of the formula the
cursor is on and shows the current type of the expression. If you
select this option, the variable will be reformatted according to
the indicated type.
? Any type. Selecting this option will result in a prompt requesting
a type name. The variable will be formatted as indicated by the
type, which may be one of the following types:
o char
o int
o long
o uchar
o uint
o ulong
o float
o double
o @var
The @var type tells SD386 to format the variable with the type of
the variable "var" For example, use @mystruct to format a variable
with the mystruct type.
If you use the IBM C Set/2 compiler with the /Ti option, the
Microsoft C compiler /Zi option, or the PL/X-86 compiler LOGIC
option, you may also specify any program defined type. An asterisk
(*) may also be added after any one of the above types to indicate
a pointer to the type.
Use this user-defined typecast to format any block of storage as
any available variable type.
SD386 does not handle PL/X-86 expressions. PL/X-86 users should specify the C
types for their PL/X-86 variables. PL/X-86 variables map to the allowed types
as follows:
PL/X-86 Type C Type
char or char(1) char
fixed or binary int
fixed(8) or binary(8) unsigned char
fixed(15) or binary(15) int
fixed(31) or binary(31) long
fixed(16) or binary(16) unsigned int
fixed(32) or binary(32) unsigned long
ptr int *
ΓòÉΓòÉΓòÉ 7.1.5. Bitfield Handling ΓòÉΓòÉΓòÉ
Implementation of bitfields is compiler dependent and as such all compilers
choose a different way to do it. SD386 does two things in the display of bit
fields. First, it shows the bit pattern. Second, if possible, it shows the
pattern within the containing byte, word, or dword of storage. SD386 can do
this for all compilers it supports except IBM C Set/2. In this case, since bit
assignment is byte based and assignments are made from low order to high order
bits, the bit field may span two or more bytes. When this happens SD386 only
shows the bit pattern and abandons trying to show the bit pattern within the
containing storage.
Example of bit fields for some compilers
Following is a simple example of some bit field definitions and some assigned
values. The bit pattern in storage is shown below for some compilers.
struct {
unsigned int a : 1;
unsigned int b : 4;
unsigned int c : 6;
unsigned int d : 8;
} flags;
void
main()
{
flags.a = 1;
flags.b = 12;
flags.c = 57;
flags.d = 195;
}
IBM C/2 1.1 & Microsoft C 6.00
Bits are assigned from 0 to 15. The maximum size of a bit field is sixteen
bits. Several bitfields may be contained within a word of storage but a bit
field will never span words.
111111 111111
5432109876543210 5432109876543210
................ ................
1 a
1100 b
111001 c
11000011 d
CL386
Bits are assigned from 0 to 31. The maximum size of a bit field is 32 bits.
Several bit fields may be contained within a dword of storage, but a bit field
will never span dwords.
3222222222221111111111
10987654321098765432109876543210
................................
1 a
1100 b
111001 c
11000011 d
.............
IBM C Set/2
Bit assignment is byte based in a bit string format. Bits within bytes are
assigned from 0 to 7. Several bit fields may be contained within a byte of
storage and a bit field may span bytes or several bytes. When a bit field spans
bytes, SD386 chooses to show the bit pattern and does not try to show the
pattern within the containing storage.
76543210 76543210 76543210 76543210
........ ........ ........ ........
1 a
1100 b
001 111 c <- spans 2 bytes
SD386 shows as 111001.
00011 110 d <- spans 2 bytes
SD386 shows as 11000011.
PL/X-86
Bit assignment is byte based in a bit string format. Bits within bytes are
assigned from 7 to 0. Several bit fields may be contained within a byte of
storage and a bit field may span bytes or several bytes.
76543210 76543210 76543210 76543210
........ ........ ........ ........
1 a
0011 b
100 111 c
11000 011 d
ΓòÉΓòÉΓòÉ 7.2. Data Expansion Window Details ΓòÉΓòÉΓòÉ
The Data Expansion window provides an expanded view of a variable such as a
member of a structure or union. To expand a variable into the window, place the
cursor on a line containing the variable in either the Source or Data window
and choose the Expand Var pulldown on the Data menu.
If the member is a structure or union, its components will be displayed in the
Data Expansion window. If the member is a pointer to another structure, etc.,
the contents of the variable pointed to by the pointer will be displayed in the
Data Expansion window.
The window also allows you to easily traverse linked lists. For example, if you
use structures with next pointers to create linked lists, you can traverse the
linked list by using the Data Expansion window keys to move up and down in the
list. In fact, it's easiest if you create your structures with the first member
as the next pointer. For example:
typedef struct node
{
struct node *next;
char name[20];
char ssnum[11];
} NODE;
To traverse a linked list, put the first element into the Data window. Then,
place the cursor on the line for the next pointer and press the key for the
Expand Var function. The next list element will be displayed in the Data
Expansion window. To continue to traverse down the linked list, repeatedly
press the Right Arrow or Enter key. With each key, SD386 will display the next
element in the list (pointed to by next). To traverse back up the linked list,
repeatedly press the Left Arrow key. With each key, SD386 will display the
previous element. To leave the Data Expansion window, press the Esc key.
ΓòÉΓòÉΓòÉ 7.3. Co-processor Window Details ΓòÉΓòÉΓòÉ
The example below is from a typical co-processor register display. The layout
and function of the registers is consistent with the documentation in the Intel
30387 Programmer's Reference Manual.
0 .... ................
1 .... ................
2 .... ................
3 .... ................
4 .... ................
5 .... ................
6 ST0 0000 0000000000000000
+0.0000000000000000000000
7 ST1 3FFF C000000000000000
+1.5000000000000000000000
C CCCESPUOZDI
B3TOP210SFEEEEEE
Status: 1011000010000100
RCPC PUOZDI
Control: 0000001101100010
The physical registers, numbered 0-7, are fixed. The logical registers,
ST0-ST7, are a function of the current state of the stack and will move up and
down in a stack fashion as a function of stack usage. In this example, there
are two numeric values on the stack in logical registers ST0 and ST1. ST0 is
contained in physical register 6 and ST1 is contained in physical register 7.
ST0 is always the top of the stack.
Each stack value is shown in hex and decimal format. There are four bytes of
sign + exponent and 16 bytes (64 bits) of significand. The decimal values are
shown with 19 bits of precision. See the Intel documentation for a discussion
of numeric precision. This is a subject well beyond the scope of this
documentation.
The Status and Control registers are also labeled according to the Intel
documentation. Notice that the Status register contains one bit fields with two
character vertical labels except the "TOP" field. This field is a three bit
field and is labeled horizontally.
Note: Co-processor exceptions are reported on the first instruction after the
offending instruction. This is how the hardware works. Most of the time, this
will be the previous instruction, however, this is not guaranteed.
When the exception is reported, the co-processor registers have already been
reset to the init state, so you have an exception but the register information
is useless. You will have to set a breakpoint on the previous instruction and
restart to see the "real" state of the registers when the exception occurred.
Essentially, the debugger can't get the registers at the time of the exception
without restarting. We discussed this with the OS/2 developers but were told
this would be a permanent restriction. One thing you can do is observe the
Status register exception flags which will show the exception flag raised when
the offending instruction executes. At this point, the registers should reflect
the values causing the exception.
For a complete discussion of co-processor function, see the following Intel
reference books:
o 80387 Programmer's Reference Manual
o i486 Microprocesser Programmer's Reference Manual.
ΓòÉΓòÉΓòÉ 7.4. Watchpoint Window Details ΓòÉΓòÉΓòÉ
You can access the 80386/80486 hardware debug registers by using SD386
watchpoints. This is a debugging advantage provided with OS/2 2.x since
previous releases of the operating system did not provide the API needed to
access these registers. The debug registers can be used to set both instruction
and data breakpoints. The most significant improvement comes with the ability
to set data breakpoints.
Debuggers typically implement data breakpoints by single stepping program
instructions and examining the address locations to determine if a value has
changed. This method is essentially useless for applications of any complexity.
By using the debug registers, data breakpoints can be implemented without
incurring the overhead of single stepping and can now become an integral part
of the debugging process.
SD386 implements access to the debug registers by providing a Watchpoint window
via the Hardware Debug Registers pulldown. You are allowed to set a maximum of
four watchpoints. This is a hardware restriction. The window lets you specify
your watchpoints by entering information into a number of fields. All fields
except the expression field have pre-defined values that you select by simply
pressing the spacebar. In the expression field, you will enter any expression
that evaluates to a size of 1,2, or 4 bytes. A complete description of the
field entries for the Watchpoint window follows. You can also use Help while
viewing the Watchpoint window to get online help.
See the Intel 80386/80486 Programmer's reference manual for more information on
the hardware debug registers.
Watchpoint Window Functions
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé MOUSE INPUT Γöé KEY INPUT Γöé IF YOU WANT TO Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Γöé UP/DOWN ARROW Γöé Select a watchpoint Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Γöé LEFT/RIGHT ARROW Γöé Tab to next field Γöé
Γöé Γöé OR TABS Γöé Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <SIZE> Γöé Γöé Set size of expression (1, 2, or 4 Γöé
Γöé Γöé Γöé bytes) Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <SCOPE> Γöé Γöé Set scope of expression (local or Γöé
Γöé Γöé Γöé global) Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <TYPE> Γöé Γöé Set access type (Write, Read/Write, or Γöé
Γöé Γöé Γöé Execute) Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <STATUS> Γöé Γöé Set status (enabled or disabled) Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <HELP> Γöé F1 Γöé See the Help panel Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <ENTER> Γöé ENTER Γöé Put in the watchpoints Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <CANCEL> Γöé ESC Γöé Exit without any action Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé NOTE: The Expression must evaluate to a size of 1,2 or 4 bytes. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé NOTE: An '*' before the address field indicates SD386 aligned address. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
Note: Size lengths of 2 and 4 bytes must be word and dword aligned
respectively. SD386 enforces the necessary alignment and annotates the address
with an "*" if alignment is necessary.
Note: You cannot modify the Addr field. If you want this field to contain a
specific address, enter it into the expression field.
Note: Local watchpoints are specific to a single process - the application
you're debugging. Global watchpoints are effective in the context of any
process. If you use a global watchpoint, you may get many more hits than you
expect because many processes may include the address you specify. Currently,
SD386 filters its own process id so hits inside SD386 will not be displayed.
Note: Watchpoint types can be Write, ReadWrite, or Execute. Write means the
watchpoint will be hit only when the specified address is written to. ReadWrite
means the watchpoint will be hit when the specified address is accessed (read
from or written to). Execute means the watchpoint will be hit when the
specified address is executed.
ΓòÉΓòÉΓòÉ 7.5. Thread Window Details ΓòÉΓòÉΓòÉ
The SD386 thread selection window allows you to choose which threads are
allowed to run and which are frozen. The thread status consists of two parts:
the frozen (non-runnable) / thawed (runnable) state, and the actual state based
on resources the thread may be waiting on. This actual state is runnable (the
thread is not blocked on a resource) or blocked. You can choose to freeze or
thaw individual threads, freeze or thaw all threads, and display the source
filename and function name associated with each thread.
If you freeze all of your application's threads and then attempt to run your
application, it will lock up.
Selecting a thread as the one to execute does not ensure that it will be the
one that OS/2 allows to run unless you single step. OS/2 will look that the
priority of all thawed threads and will allow the one with the highest priority
to run if you run the application (i.e., you use the Run function). If you use
the Single Step function, however, OS/2 ensures that only the selected thread
is stepped. The other threads do not get time slices in this case.
Thread Window Functions
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé MOUSE INPUT Γöé KEY INPUT Γöé IF YOU WANT TO Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé Γöé UP/DOWN ARROW Γöé Highlight a thread Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <SELECT> Γöé SPACE Γöé Select highlighted thread Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <NAMES> Γöé A Γöé Toggle state, filename, line number, Γöé
Γöé Γöé Γöé and function info Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <FREEZE> Γöé F Γöé Freeze highlighted thread Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <THAW> Γöé T Γöé Thaw highlighted thread Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <FREEZE ALL> Γöé R Γöé Freeze all threads Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <THAW ALL> Γöé H Γöé Thaw all threads Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <ENTER> Γöé ENTER Γöé Accept current thread status Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <CANCEL> Γöé ESC Γöé Exit without any action Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <HELP> Γöé F1 Γöé See the Help panel Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé NOTE: The Expression must evaluate to a size of 1,2 or 4 bytes. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé NOTE: An '*' before the address field indicates SD386 aligned address. Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 7.6. Exception Window Details ΓòÉΓòÉΓòÉ
Exception Window Functions
The SD386 exception notification window allows you to choose the processor
exceptions for which you will be notified. You can choose to be notified or not
for each of the defined exceptions. You can also reset the exception
notifications to defaults and save your selections to the SD386 profile.
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé MOUSE INPUT Γöé KEY INPUT Γöé IF YOU WANT TO Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé LEFT CLICK Γöé UP/DOWN ARROW Γöé Select an exception Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé MOVE & LEFT Γöé LEFT/RIGHT Γöé Move to next field Γöé
Γöé CLICK Γöé ARROWS OR TAB Γöé Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <NEXT> OR LEFT Γöé SPACE Γöé Switch to next notification option Γöé
Γöé CLICK Γöé Γöé Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <DEFAULT> Γöé D Γöé Set all exception notifications to Γöé
Γöé Γöé Γöé defaults Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <RESET> Γöé R Γöé Reset single exception notification to Γöé
Γöé Γöé Γöé default Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <THAW> Γöé T Γöé Thaw highlighted thread Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <SAVE> Γöé S Γöé Save exception notifications to Γöé
Γöé Γöé Γöé profile Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <ENTER> Γöé ENTER Γöé Accept current exception notifications Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <CANCEL> Γöé ESC Γöé Exit without any action Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé <HELP> Γöé F1 Γöé See the Help panel Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 8. Remote Debugging ΓòÉΓòÉΓòÉ
This section discusses various ways to debug remotely.
ΓòÉΓòÉΓòÉ 8.1. Overview ΓòÉΓòÉΓòÉ
SD386 gives you the ability to debug your applications remotely over an async
or netbios connection. Some reasons why you might want to do this are:
o If you have an application that is hanging your machine, you can use a remote
connection to run your application under the debugger, reproduce the hang,
and then from the debugger, you can enter a Ctrl-Break. You will return to
the debugger with an "Asynchronous Stop" notification and then you can
examine threads to determine why the application is hung.
o If you are debugging a PM application, sometimes PM resource interlocks can
lead to machine hangs. By moving the debugger to another machine thereby
giving the debugger its own set of resources, you can avoid these types of
hangs.
o If you're debugging a PM application, sometimes the debugger windows and the
screen swapping are annoying. You can alleviate this annoyance with a remote
connection.
o If you have a problematic application at a customer's location and
reproducing a test case is not feasible, then you can dial up the application
and debug the problem as it exists in the customer's environment from your
office workstation.
o If you have an application that must be started with DosExecPgm(), yet it
can't share its screen group with the debugger, then you have to move the
debugger to another machine. The Session Manager (AKA the first instance of
the PM Shell) and OS/2 install programs are examples of these types of
applications.
The remote debugging configuration can best be described with reference to the
following diagram.
SD386 Machine Probe(ESP) Machine
----------------- ------------------
| | Remote Connection | |
| SD386 |<---------------//--------------->| ESP |
| | | |
| + | | + |
| | | |
| Your application|<================================>| Your application |
| EXEs and DLLs | | EXEs and DLLs. |
| compiled and | (These EXEs and DLLs must match) | |
| linked with | | |
| debug switches. | | |
| You only need | | |
| the ones you | | |
| want to debug. | | |
| | | |
| + | | |
| | | |
| Source | | |
----------------- ------------------
The SD386 Machine consists of SD386 plus debug images of the application's EXEs
and DLLs that you want to debug. If you want to see source then you will also
need the source code. "Debug image" means that the debugger has access to the
EXEs and DLLs compiled and linked with the compiler and linker debug switches.
Any EXEs or DLLs for which there are no images will be debugged at assembler
level.
The Probe Machine consists of the Execution Services Probe(ESP) plus your
application's EXEs and DLLs. These executables are the ones shipped with your
application, and thus, do not need debug information attached. BUT, the ones
you want to debug must have a matching debug image on the SD386 Machine.
The Remote Connection consists of an async connection via null modem or phone
line, or a netbios connection.
ΓòÉΓòÉΓòÉ 8.2. Starting ESP ΓòÉΓòÉΓòÉ
To start ESP from the OS/2 command prompt, enter the ESP command and any ESP
options.
The full description of the command syntax is:
ESP эoptions∙
where the options are:
/rn Remote debug over an async connection at the line speed specified
by n. The following n values are supported:
o 0 - 300
o 1 - 1200
o 2 - 2400
o 3 - 4800
o 4 - 9600
o 5 - 19200
o 6 - 38400
/an For an async connection, use the com port specified by n. The
default if this option is not specified is com port 1(COM1). You
can use values of 1, 2, 3, or 4.
/o[Filespec] Make a modem-modem phone line connection. If the optional
Filespec is not used, then ESP will send the AT commands
necessary to put the modem in Auto-Answer mode. Filespec is a
file of AT commands that you can send to your modem if you don't
want to take the default.
/nAname Make a netbios connection to an adapter by the name Aname. Use
the same name on both the SD386 and the ESP machine. Aname needs
to 13 characters or less.
ΓòÉΓòÉΓòÉ 8.3. Netbios Connection ΓòÉΓòÉΓòÉ
The only thing you need to know about netbios connections is to use the same
logical name on both the ESP and the SD386 machines. You can have multiple
netbios connections to a probe machine hence you can debug two unrelated
processes running on the same machine using two separate probes and netbios
connections.
ΓòÉΓòÉΓòÉ 8.4. Async Connection ΓòÉΓòÉΓòÉ
The following sections provide information about using an asynchronous
communications connection to remote debug an application. SD386 supports both a
null modem and a modem to modem phone line connect.
ΓòÉΓòÉΓòÉ 8.4.1. Com Port Settings ΓòÉΓòÉΓòÉ
SD386 and ESP set up the com port for you. You do not have to issue any MODE
commands. The only option is the bit rate and you set this using the /rэn∙
invocation option. All transmissions are binary so the standard "N,8,1"
settings are fixed by SD386 and ESP.
ΓòÉΓòÉΓòÉ 8.4.2. Null Modem Connection ΓòÉΓòÉΓòÉ
Remote debugging over an async connection is accomplished by connecting the com
ports of two machines using a null modem cable. You will need a null modem
cable, or a standard serial cable plus a null modem adaptor. Normally, you will
need female connectors on both ends of the cable.
ΓòÉΓòÉΓòÉ 8.4.3. Modem-Modem Connection ΓòÉΓòÉΓòÉ
The modem to modem connection support is provided to let you debug your
application over a phone line.
ΓòÉΓòÉΓòÉ 8.4.3.1. Modem Support ΓòÉΓòÉΓòÉ
The /o invocation option is provided to help you make the phone line connection
with your particular modem. By default, SD386 will originate the call prompting
you for the phone number that you want to dial. ESP, by default, will answer
the call by placing the modem in Auto-Answer mode. If you don't want to use the
defaults, then you can put the AT commands in a file and either SD386 or ESP
will send these commands to your modem. Some sample command files are provided
in the package and will be discussed in detail later.
ΓòÉΓòÉΓòÉ 8.4.3.2. Handshaking ΓòÉΓòÉΓòÉ
If you're using a modem-modem connection, both modems need to be set up for
hardware handshaking. This means that the RTS/CTS lines are used for
handshaking on data transmissions, and DTR/DSR are used to signal the readiness
of the computer and the modem. Most of the time hardware handshaking is the
factory default; however, you might be using a modem that someone has set up
for a bulletin board or some other application and it may have settings
different from the factory defaults. There should be a simple AT command to set
your modem back to factory defaults. For example, the AT command for a
Practical Peripheral 9600SA is AT&F. ESP and SD386 set up the hardware
handshaking for you on the com port but you will have to set up your modem.
ΓòÉΓòÉΓòÉ 8.4.3.3. Command Mode to Online Mode ΓòÉΓòÉΓòÉ
When you first turn power on to your modem it should come up in command mode.
You can test this by bringing up a terminal emulator and typing AT followed by
ENTER. You should get back an OK result message. If you don't, then you
probably have a handshaking problem. When you use the /o invocation option,
SD386 and ESP issue the AT command to test for modem attention. You will see
the AT command and the OK result message printed on the screen. After that,
SD386 and ESP will send modem commands to either originate or answer the call.
After the commands are sent, you will see the result messages coming back from
the modem until a "CONNECT" message is received. This is the indication that
you're now online and ready to start debugging.
ΓòÉΓòÉΓòÉ 8.4.3.4. Originate Mode ΓòÉΓòÉΓòÉ
After turning on the modem and coming up in command mode you will normally set
up the SD386 side of the connection to originate the call. By default, SD386
will send the AT commands necessary to originate the call and prompt you for a
phone number.
ΓòÉΓòÉΓòÉ 8.4.3.5. Answer Mode ΓòÉΓòÉΓòÉ
After turning on the modem and coming up in command mode you will normally set
up the ESP side of the connection to answer the call. By default, ESP will send
the AT commands necessary to answer the call and wait for the call from SD386
to come in.
ΓòÉΓòÉΓòÉ 8.4.3.6. Result Messages ΓòÉΓòÉΓòÉ
You will see messages printed on your screen as SD386 and ESP send modem
commands. The first messages will be an echo of the AT command sent by SD386 or
ESP and the next message will be the OK result message. After that, you will
see your originate or answer messages. The last message you see should be the
"CONNECT" message.
ΓòÉΓòÉΓòÉ 8.4.3.7. Sample Modem Command Files ΓòÉΓòÉΓòÉ
Here are some examples of modem command files:
modemsd.ppi
| |
| ---Practical Peripherals/Practical Modern 9600SA
|
---SD386(debugger) side of the connection.
AT&F <--- set factory defaults.
AT&C1&D0 <--- hardware handshaking/don't disconnect at DTR drop
ATL0 <--- set modem speaker to lowest level.
ATS2=255 <--- turn off escape character sequence.
ATS7=20 <--- wait 20 seconds for the remote modem to answer.
ATDT2152 <--- dial local extension 2152.
modemesp.ppi
| |
| ---Practical Peripherals/Practical Modern 9600SA
|
---ESP(probe) side of the connection.
AT&F <--- set factory defaults.
AT&C1&D2 <--- hardware handshaking/disconnect at DTR drop.
ATL0 <--- set modem speaker to lowest level.
ATS2=255 <--- turn off escape character sequence.
ATS0=1 <--- Auto-Answer after one ring.
ΓòÉΓòÉΓòÉ 9. Hints and Tips ΓòÉΓòÉΓòÉ
This chapter contains various hints, tips, and information. We suggest that you
scan through the headings and read those sections that seem relevant to you.
Available topics are:
Mixed Application and Device Driver Debugging:
o Using SD386 with ASDT32
DLL info:
o Debugging DLLs
Assumptions and Limitations:
o Assumptions
o General Limitations
o Presentation Manager Limitations
Compiler Notes:
o Notes for PL/X-86 Programs
o Notes for C Programs
Debugging speed:
o Single Step Slowness
ΓòÉΓòÉΓòÉ 9.1. Using SD386 with ASDT32 ΓòÉΓòÉΓòÉ
If you plan on using SD386 and ASDT32 concurrently, you must follow these
instructions. Basically, when you load ASDT32 at start-up time, you must tell
it to keep away from the normal debug interrupts or SD386 will not be able to
execute your target program. To do this, issue these commands in your
CONFIG.SYS file:
DEVICE=ASDT32.EXE /K=4A /1 /3 /D
DEVICE=ASDT322.EXE
Once you've entered ASDT32, you must use the ASDT32 TI command to take
interrupts 1, 3, and D. Before leaving ASDT32, you must free these interrupts
again with the ASDT32 RI command.
Note: The =4A part of the option allows you to choose the keycode you wish to
be the ASDT32 hotkey. The /K=4A option is not necessary to run these two tools
concurrently. It does allow you to hot key into ASDT32 at any time.
For more information about this debugging scenario, see the SD86 FORUM, the
CODEVIEW FORUM, and the ASDT FORUM on IBMPC. There is also additional
information in the ASDT User's Guide and Reference, which is available in the
ASDTPACKAGE on OS2TOOLS.
ΓòÉΓòÉΓòÉ 9.2. Debugging DLLs ΓòÉΓòÉΓòÉ
There are several things you must be careful about when debugging DLLs at the
source level. While SD386 has tried to remove barriers to DLL source debugging,
there are still system and debugging requirements. These are:
o Your DLL itself must be available to the debugger. This means it must be in a
directory that is specified in the LIBPATH statement to OS/2.
We suggest you use the CHKDLL32 tool which can tell you if all of your DLLs
are available.
o If you do not have DLL initialization code, you should not make any of your
functions in your DLL be a main function. For C, this means no main()
function. For PL/X-86, this means no main procedure and no procedure with
options(main).
o To set breakpoints in dynamically loaded DLLs, or DLLs which are not loaded
until the calling program issues a DosLoadModule call, you must use deferred
breakpoints. To set a deferred breakpoint, use the Function entry or Address
pulldowns on the Breakpoints menu. Enter the function name or address of the
deferred breakpoint. SD386 will ask you if you want to defer the breakpoint
and set it on the first occurence, all occurences, or not at all. SD386 will
cause the breakpoint to be inserted in your DLL when that DLL is loaded.
For example, you can set a deferred breakpoint on a function name in your
dynamically linked (run-time) DLL and it will be hit when that function is
invoked after the DLL is loaded.
Another method is to force the dynamically linked (run-time) DLL to be
statically linked by IMPORTing one of the function names from the DLL to the
EXE file. See Get Function in the File for more information about this.
ΓòÉΓòÉΓòÉ 9.3. Assumptions ΓòÉΓòÉΓòÉ
SD386 must make various assumptions in order to debug your application program.
Assumptions which may confuse you are described in the following section (Call
Stack).
ΓòÉΓòÉΓòÉ 9.3.1. Call Stack ΓòÉΓòÉΓòÉ
To display the program call stack (the CallStack pulldown on the Miscmenu),
which displays a "how I got here" list of active function calls, SD386 assumes
that standard call prologs and epilogs are used. By this we mean that each of
your functions executes standard entry and exit code at the top and bottom of
the function. Some of your code may not use such standard entry and exit code.
Therefore, SD386 allows you to ask for a more rigorous look at the call stack
with the <Show All> function on the CallStack pulldown. Because this search can
take some time to perform, SD386 does not use the more rigorous algorithm
unless you ask for it on the CallStack pulldown. Typically, you will need to
use the <Show All> function for unwinding exception handlers and handwritten
thunks.
Note: If your module does not contain any automatic data, i.e., data that
resides on the stack, then there may be no stack frame generated for that
module. In that case, SD386 may not be able to include that module in its call
stack display unless you choose the more rigorous search algorithm.
ΓòÉΓòÉΓòÉ 9.4. General Limitations ΓòÉΓòÉΓòÉ
This release of SD386 has the following limitations:
o PL/X-86 source-level support is not complete. See Notes for PL/X-86 Programs
for details.
o No edit capability for character arrays inside a structure.
o No edit capability for bit strings.
o No special support for debugging multi-process applications or child
processes.
SD386 has the following general limitations:
o You must be very careful when debugging a Presentation Manager (PM) program
to not switch screen groups at the wrong time.
o You should invoke SD386 from a full-screen session if you are debugging a PM
application. This lessens the chance of a lockup due to PM message queue
traffic problems.
See Presentation Manager Limitations for more information.
ΓòÉΓòÉΓòÉ 9.5. Presentation Manager Limitations ΓòÉΓòÉΓòÉ
In general, you should not indiscriminately switch screen groups (with the
system key sequences C_Esc or A_Esc) because PM will lock up waiting for the
target (debuggee) program to service its messages. Since the debuggee is under
the control of a debugger, it cannot service its messages under some
situations. If you switch screen groups and conditions are right (wrong?), you
may end up with a system that is locked up. This condition exists because of
the single-thread message handling characteristics of PM. It is improved in
OS/2 2.x, but there are still instances where you can cause system problems
when switching screen groups.
Also, you should invoke SD386 from a full-screen session instead of from a
window if you are debugging a PM application. This lessens the chance of a
lockup due to PM message queue traffic problems. If you invoke SD386 from a
window and debug a PM application, you risk system lockup because of this PM
message queue limitation.
ΓòÉΓòÉΓòÉ 9.6. Notes for PL/X-86 Programs ΓòÉΓòÉΓòÉ
To ensure maximum source-level support for PL/X-86 programs, you must use the
following options:
PL/X-86: LOGIC
AL/86: LOGIC
DebObj: Use DebObj32 for 32-bit apps. Use DebObj16 for 16-bit apps.
LINK386: /CO
See the sample modules below for examples.
It is also a good idea to use the following AL/86 options. These options affect
the output produced by DebObj.
NOINC Removes included source (brought in with %include statements)
from the debugging source (.DEB) file produced by DebObj. This
option can significantly reduce the size of the output .DEB
file. You should not put executable statements in included
files if you want to use the NOINC option - use included files
only for declarations and comments.
NOUNREFD Removes unreferenced variables from the output debug
information produced by DebObj. This option can significantly
reduce the size of the output .OBJ file and can reduce the
amount of time SD386 uses to find complex variables in the
debug information in the resulting .EXE file.
Unreferenced variables include simple variables which are
declared but not used as well as structure members which are
not used. Structures and members which also contain members
are always considered referenced (by PL/X-86) even if they are
never used in the code.
ΓòÉΓòÉΓòÉ 9.6.1. Coding a PL/X-86 "Main" Procedure ΓòÉΓòÉΓòÉ
There are three ways to code a PL/X-86 "main" procedure:
1. Using a C model and not declaring your own stack means you plan to use the
C run-time library and act like a C main function.
2. Using a C model and declaring your own stack means you will not use the C
run-time library and will not act like a C main function, but your segments
will be grouped together by the linker like it would a C program.
3. Using a non-C model and declaring your own stack means you can have
separate data and stack segments, which gives more flexibility to larger
programs.
Each method has advantages. Use of the C run-time library means your program is
set up like a C program. In this case, PL/X-86 provides memory model support to
match that of C. The C run-time start-up code is used, and your program's name
must be main. Without the C run-time library, your program does not use the C
start-up code and its name can be anything you want it to be. Bare-bones
samples are shown below:
ΓòÉΓòÉΓòÉ 9.6.1.1. Sample use of the C run-time library: ΓòÉΓòÉΓòÉ
Note: You must specify the OS2 library (that comes with the OS/2 TOOLKIT) and
the C run-time library (e.g., LIBC) when linking this example.
@process env(os2(32)) mach(i386v) model(flat) logic escape('\') asciiz;
main: proc options( main );
dcl main entry options( linkage(c) );
dcl DosExit entry(fixed(15),fixed(15)) options(linkage(pascal)) far;
/* insert your code or call your code here. */
DosExit(1,0);
end main;
PL/X Main Procedure - Flat Model with C run-time
ΓòÉΓòÉΓòÉ 9.6.1.2. Sample non-C model setup: ΓòÉΓòÉΓòÉ
Note: You must specify only the OS2 library (that comes with the OS/2 TOOLKIT)
when linking this example.
@process env(os2(32)) mach(i386v) model(flat) logic escape('\') asciiz;
MyProc: proc options( noepilog , main , far );
dcl DosExit entry(fixed(15),fixed(15)) far options(linkage(pascal));
dcl usrstk stack(8192) external local near(ss);
dcl dgroup segment near(ds);
/* insert your code or call your code here. */
call DosExit(1,0);
end MyProc;
PL/X Main Procedure - Flat Model without C run-time
ΓòÉΓòÉΓòÉ 9.6.2. Source-level Support ΓòÉΓòÉΓòÉ
SD386 does not provide full source-level support for PL/X-86 programs. In
particular, the following capabilities are not yet available:
o Typed display of some complex based variables.
Many based variables, including those which are pointed to by a declared
pointer, may be displayed directly by the normal methods for displaying
variables (Watch Var function from the Source window, typing the based
variable's name in the Data window, etc.).
Based variables which are declared based or based(*) may be displayed by
typing a referencing pointer's name -> the based variable name in the Data
window, as in:
ptr1->BVAR
You should also use this method (ptrname->basedvarname) for displaying based
variables which are respecified based on a secondary pointer.
Based variables which are based on a complex pointer expression cannot be
directly accessed. You must determine the referencing address yourself. If
you have a spare pointer which you can set to this address, then you can use
it as the referencing pointer and display ptr1->basedvar just like a
respecified variable or variable based(*) above. If you do not have a pointer
which you can set to this address, then you will be unable to display the
based pointer.
o Complete display of bit strings which are longer than 64 bits. Longer strings
will be truncated in the Data window to 64 bits.
o Multi-level structures are handled by treating members as simple variables.
Structure members which are structures themselves are displayed as
hexadecimal storage. You can expand the display of the sub-structures by
using the Expand Var function or the Format Var function in the Data window.
See Data Pulldown for details.
o Evaluation of PL/X-86 expressions.
o Array dimension support.
Since C arrays are normally 0-based, the SD386 support in this release
assumes arrays are 0-based. If you plan to mix C and PL/X-86 code or if you
want your PL/X-86 source to match the SD386 array bounds support, we suggest
you use the dlbound(0) @process option in PL/X-86. This option turns your
arrays that do not have a lower bound specified into 0-based arrays.
o Multiple compilation (batch).
If you use multiple compilations or assemblies by putting more than one
@process statement in a PL/X-86 source file, the PC linker will not generate
correct line number tables for the resulting object file. This means you will
not be able to debug the resulting object file at the source level. For this
reason, the DebObj post-processor does not allow more than one @process
statement in one source file.
o Unnamed Variables.
Declaring a variable without a name, such as a structure without a level one
name (dcl 1 *), causes PL/X-86 to generate a name for that variable. These
instances of generated names, if they are automatic (stack) variables, are
difficult to view with source-level debuggers. You should name each variable
to prevent this possibility.
The following anomalies in PL/X-86 support exist:
o An If-Then-Else construct may have different lines appear executable than you
might expect. For example,
If myvar1 < 23 then <- executable
myvar2 = 5; <- executable
Else <- executable
myvar2 = 6; <- not executable
In this example, the else line is the executable line for the else clause. If
the condition is true, SD386 will stop at the else line but will not execute
the else clause. If the condition is false, SD386 will not stop at the else
line but will execute the else clause.
This anomaly should only happen for cases where there is only one statement
in the else clause. If there is a do loop in the else clause, all of the
statements in the do loop will be executable except for the do and end; The
else itself is the executable line for the do statement. So, we suggest you
place your else clauses in do loops if you want to set breakpoints in them.
The reason for this anomaly is the way PL/X-86 considers the else-stmt or
else-do combination to be all one statement and therefore one executable
line.
In general, the following types of PL/X-86 variables should be available in
SD386:
o static external local
o static external nonlocal
o static (non-external)
o automatic
o based, based(*), based(simpleptr)
o parameters which are passed by address
o complex vars such as structs, arrays, character strings, bit definitions, bit
strings
ΓòÉΓòÉΓòÉ 9.6.3. Disassembly ΓòÉΓòÉΓòÉ
In PL/X-86 programs, the ID option is the default. Use of this option causes
the PL/X-86 compiler to place program ID information near the top of your
module's code space. This ID information is actually data that is not executed.
The current SD386 disassembler attempts to disassemble this data area as code.
This causes incorrect disassembly for a short distance if you try to
disassemble the first executable statement of a module, which is typically the
proc statement itself. SD386 usually picks up the correct disassembly within a
couple of source statements.
The default disassembly mnemonics in SD386 are Intel mnemonics. If you prefer
AL/86 mnemonics, you can switch with the Mnemonics pulldown on the Misc menu.
ΓòÉΓòÉΓòÉ 9.7. Notes for C Programs ΓòÉΓòÉΓòÉ
To ensure maximum source-level support for C programs, you must use the
following options:
IBM C Set/2: /Ti /O-
Microsoft C: /Zi /Od
LINK386: /CO or /DE
ΓòÉΓòÉΓòÉ 9.7.1. Source in Include Files ΓòÉΓòÉΓòÉ
SD386 is unable to debug source you place in include (.h) files. You should
place all code in source (.c) files and use include files for
non-code-producing statements, declarations, prototypes, and comments.
ΓòÉΓòÉΓòÉ 9.7.2. Source-level Support ΓòÉΓòÉΓòÉ
SD386 does not yet provide full source-level support for C programs. In
particular, the following capabilities are not yet available:
o Program scope support.
In the Data window, SD386 does not clearly delineate which stack frame a
local variable applies to.
o Evaluation of C expressions.
SD386 does not have full C expression evaluation in the Data window and in
user input areas such as conditional breakpoints.
ΓòÉΓòÉΓòÉ 9.7.3. Floating Point Suggestions for C ΓòÉΓòÉΓòÉ
If you use floating point, we suggest that you use an 80387 co-processor. There
are enough problems with the floating-point emulation that it is much safer to
use the co-processor.
ΓòÉΓòÉΓòÉ 9.8. Single Step Slowness ΓòÉΓòÉΓòÉ
If you single step across a source line that compiles into a lengthy set of
machine instructions, your machine may appear to be hung. Actually, it is
single stepping many instructions. An example in C is:
for ( i = 1 ; i = n ; i++ )
{
stmts;
}
In this case, if you single step across the for statement, execution will be
very slow if n is large.
ΓòÉΓòÉΓòÉ 10. Example of Installing Peer Services ΓòÉΓòÉΓòÉ
The following are steps for installing a peer services:
o Install LAPS(MPTS on Lan Server 4.0). Configure the lan adapters and
protocols. On my machine, I configured the following adapter and protocols:
IBM Token-Ring Network Adapter
IBM IEEE 802.2
IBM OS/2 NETBIOS
o Install Lan Requester and Peer Services. Install and configure the Lan
Requester. You will need to enter a requester name and a domain name. I used:
Requester name: M605093
Domain name : LEXDOMCV
Install and configure Peer Services. You will probably want to use a "User
Type" of "Share Level" here because it provides the simplest access to the
peer server's resources. A "User Type" of "User" will require the use of
userids and passwords by both the peer server and the client which would be
overkill for setting up remote debugging.
o Shutdown/Reboot/Logon with generic userid and password. Logon to the lan as
follows:
logon USERID /p:PASSWORD
where you literally use USERID and PASSWORD.
o Select User Profile Management(UPM) Services. Go into User Account Management
and put in your real userid and password. Enter a "User Type" of
"Administrator" because Peer Services needs this.
o Logoff/Logon under your real userid and password.
o Share the directories.
net share joetest=c:\ /PERMISSIONS:XR /USERS:1
will define an alias that you can net use to.
o From the client machine, net use to the alias defined in step 6.
net use x: \\m605093\joetest
ΓòÉΓòÉΓòÉ 11. Problem Determination ΓòÉΓòÉΓòÉ
The following sections detail scenarios and solutions for various debugging
problems. These topics are available:
o No Source Code describes errors trying to display your source for debugging.
o Miscellaneous SD386 Errors describes various SD386 error messages and what to
do about them.
ΓòÉΓòÉΓòÉ 11.1. No Source Code ΓòÉΓòÉΓòÉ
If you invoke SD386 on your program and end up viewing assembly code instead of
source, there are several possible causes:
o You did not link your program with the /CO option, which causes debug
information to be placed in the executable file.
In this case, the lower left-hand corner of the SD386 display will not
contain a source file name, just an executable file name.
o You did not compile your first module with the LOGIC option (PL/X-86), the
/Ti option (IBM C Set/2), or the /Zi option (Microsoft C), which cause debug
information to be placed in the object file.
In this case, the lower left-hand corner of the SD386 display will not
contain a source file name, just an executable file name.
o You have your own run-time initialization code.
o You are invoking a DLL that contains initialization code. SD386 stops in any
such DLL initialization code, which must be written in assembler.
In this case, the lower left-hand corner of the SD386 display will contain
the DLL name and possibly the source file name.
o Your source files are not accessible by SD386. SD386 looks in the following
places (in order) for your source:
1. the current directory,
2. the directory specified to the compiler (if any), which ends up in the
EXE file for each OBJ file,
3. the directories specified in the SD386SRC environment variable, and
4. the directories in the system PATH.
o In this case, the lower left-hand corner of the SD386 display will contain a
source file name as well as the executable file name.
o You have renamed a source file.
In this case, the lower left-hand corner of the SD386 display will contain
the source file name it tried to find as well as the executable file name.
o (PL/X-86 only) - you did not run the DebObj post-processor, which puts debug
info in the OBJ file.
In this case, the lower left-hand corner of the SD386 display will contain
the source file name A.DEB instead of the real file name.
ΓòÉΓòÉΓòÉ 11.2. Miscellaneous SD386 Errors ΓòÉΓòÉΓòÉ
Some bugs that appear to be in SD386 itself are caused by user action. In
particular, the /Zl compiler option (suppress default library selection) in C
can cause SD386 to have protection exceptions, go south, or otherwise appear
sick. You should never use the C compiler option /Zl if you plan to debug the
output from that compilation. While the output may be debuggable in some cases,
in many cases the resulting EXE file's debug information is severely corrupted
and causes SD386 to crash.
List of Common SD386 Errors
Unable to open the EXE file. You specified an incorrect name for the EXE file
to be debugged. SD386 was unable to find the EXE file.
Unable to start session. rc=xxxxx. SD386 was unable to start your application
with DosStartSession. The return code indicates the DosStartSession
error that occurred. The return code from is displayed. You can find
these return codes in file BSEERR.H in the OS/2 Toolkit.
Unable to initialize EXE. SD386 was unable to start debugging your program with
DosDebug. Contact SD386 support for further assistance.
Invalid EXE file. The EXE file you specified to be debugged is not an EXE file.
This is probably due to a problem building the file.
Process Terminated. SD386 encountered a DosDebug error while starting your
application. Contact SD386 support for further assistance.
User Profile Error. The SD386 profile that SD386 found contains errors. Use a
different SD386 profile or edit the profile to remove the errors.
Cannot Find Entry Point. SD386 looks for the entry point for your application.
The entry point name depends on the language, compiler, and linkage
for your application. SD386 searches for the entry point for each
type of linkage that it knows about. Contact SD386 support if your
application was compiled and linked correctly and you get this
message.
Cannot start session. Check DLL Path. SD386 was unable to find one of your
DLLs. Many times, one of the DLLs your program needs is not in a
sub-directory which is in the LIBPATH. SD386 is then unable to open
the DLL file. We suggest you use the CHKDLL32 program which will tell
you if all of your DLLs are available or which ones are unavailable.
Note: One common error, especially if you're converting a 16-bit app
to 32-bit, is to compile some of your code as 16-bit when it really
should be 32-bit. If you link this erroneous 16-bit code in with your
32-bit code, you may get this error message with rc = 180.
Too Many DLLs. SD386 ran out of room trying to initialize all of your DLLs.
SD386 has a limit of 1000 DLLs and your application has exceeded this
limit. Contact SD386 support.
Bad Symbolic Info. SD386 encountered errors in the debug information in your
application. SD386 will allow assembler level debugging for the DLL
file in question. Contact SD386 support to help find out what the
problem is.
No Code Segments. SD386 did not find any code segments in your application.
This is probably due to an error in putting your application
together.
DLL Initialization Error. SD386 was unable to initialize one of your
application's DLLs at either the source or assembler level.
Unrecognized invocation option. You entered an SD386 option that cannot be
recognized. See Starting SD386 for a list of valid options.
Restarting... Informational - SD386 is restarting your application.
Co-Processor Not Loaded SD386 cannot display the co-processor registers if your
machine does not have a co-processor installed.
Unable to find SD386.PRO in DPATH You attempted to save settings to your
profile and SD386 cannot find the profile.
Unable to save to profile [profilename] SD386 was unable to save your changes
to the profile. Contact SD386 support for assistance.
Saving Colors to profile [profilename] Informational - SD386 is saving your
colors to your SD386 profile.
Saving Exceptions to profile [profilename] Informational - SD386 is saving your
exception settings to your SD386 profile.
Selecting Tid [threadID] Informational - SD386 is selecting the thread you
chose.
Incorrect expression The expression you entered cannot be parsed by SD386.
Enter a function name or address Informational - SD386 is asking for a
function name or address to find.
Enter file name Informational - SD386 is asking for a file name to find.
Enter immediate or deferred name or address Informational - SD386 is asking for
a function name or address for a breakpoint.
Can't find that SD386 was unable to find the text string you entered.
Can't modify this data! SD386 was unable to store the changed data item in the
target application's data area. Contact SD386 support for assistance.
Invalid value for data type You attempted to change data in memory to a value
that is incompatible with the data item's type.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
SD386 can debug C++ programs written using IBM C-Set++; however debugging is
somewhat limited since all of the IBM C-Set++ debug information is not
supported. In this case, SD386 is considered to be "C++ tolerant".