home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sd386v50.zip / sd386.inf (.txt) < prev    next >
OS/2 Help File  |  1995-03-05  |  107KB  |  3,009 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Synopsis ΓòÉΓòÉΓòÉ
  3.  
  4. This document describes how to install and use the SD386 source-level debug 
  5. tool for OS/2. 
  6.  
  7. SD386 supports debugging C and PL/X programs running on OS/2 1.x, OS/2 2.x, and 
  8. OS/2 Warp platforms. Support is provided for IBM C/2, Microsoft C 6.00, IBM 
  9. C/Set-2, and IBM C-Set++ (running C programs). SD386 supports debugging of 
  10. DLLs, multi-threaded processes, child processes, and multiple process 
  11. applications configured in a parent/child/grandchild heirarchy. SD386 supports 
  12. debugging on a single machine or on multiple machines using an asynchronous 
  13. null-modem connection, an asynchronous modem-to-modem (phone line) connection, 
  14. or a netbios connection over a Lan. SD386 supports Ctrl-Break for breaking into 
  15. an application or machine hang to examine threads and determine the cause of 
  16. the hang. 
  17.  
  18.  
  19. ΓòÉΓòÉΓòÉ 2. Introduction ΓòÉΓòÉΓòÉ
  20.  
  21. SD386 is a debugger for PL/X-86 and C applications running under OS/2 2.x. 
  22. SD386 can debug 32-bit, 16-bit, and mixed 16- and 32-bit applications. SD386 is 
  23. designed to speed up PL/X-86 and/or C program development. 
  24.  
  25. Using SD386, you can: 
  26.  
  27. o Debug PL/X-86 and/or C source programs. 
  28. o Debug OS/2 2.x applications at source level including PM applications. 
  29. o Debug OS/2 2.x applications remotely over a com port. 
  30. o Debug DLL code at the source level. 
  31. o Debug multi-threaded applications. 
  32. o Scroll through the HLL (high-level language) source, search for character 
  33.   strings, or find other separately compiled functions or files. 
  34. o View and scroll through the disassembled machine instructions, including 
  35.   co-processor instructions. 
  36. o Set breakpoints at HLL statements or machine instructions. 
  37. o Set conditional breakpoints at HLL statements or machine instructions. 
  38. o Use hardware debug watchpoints. 
  39. o Single-step program execution by HLL statement or machine instruction. 
  40. o Display program variables by name (HLL-level) or address (machine-level) and 
  41.   show the results in hexadecimal, character, decimal, floating point, or 
  42.   user-defined format. 
  43. o View arrays, structs, unions, enums, and arbitrary program-defined types in 
  44.   C. 
  45. o View variables, arrays, structures, and based variables in PL/X-86. 
  46. o Expand the view of a structure to include members. 
  47. o Expand the view of a multi-dimensional array. 
  48. o Modify variables by typing over the displayed values. 
  49. o View or change the contents of machine registers. 
  50. o View the contents of the co-processor registers. 
  51. o Set the currently executing line. 
  52. o View the target program's screen at any time during execution. 
  53. o View or change the status of the target program's threads. 
  54. o Browse any text file. 
  55. o View the target program's linked DLLs. 
  56. o Select which processor exceptions you wish SD386 to notify you of. 
  57. o Debug a child process. 
  58. o Debug a multiple process application. 
  59. o Ctrl-Break a hung application and examine threads. 
  60. o Remote debug a child process. 
  61. o Remote debug a multiple process application. 
  62. o Remote Ctrl-Break a hung application and examine threads. 
  63.  
  64.  
  65. ΓòÉΓòÉΓòÉ 2.1. Using the Online Help ΓòÉΓòÉΓòÉ
  66.  
  67. Help is available as context-sensitive help. Context-sensitive help lets you 
  68. access help from any menu choice, window, or field to discover how to use that 
  69. particular item. 
  70.  
  71. To access a help screen, use one of the following methods: 
  72.  
  73. o Select choices from the Help pull-down 
  74.  
  75. o Press F1 in any SD386 window 
  76.  
  77. o Press F1 while highlighting any menu bar item 
  78.  
  79. o Press F1 while highlighting any pull-down choice 
  80.  
  81. o Press F1 or select the Help pushbutton in any dialog box. 
  82.  
  83. You can also access most pull-down choices from the keyboard. The keys used to 
  84. access the pull-down choices are called shortcut keys and accelerator keys. For 
  85. a list of these keys, refer to the online help. 
  86.  
  87.  
  88. ΓòÉΓòÉΓòÉ 2.2. Version Changes ΓòÉΓòÉΓòÉ
  89.  
  90. This section lists changes made in various versions. 
  91.  
  92.  
  93. ΓòÉΓòÉΓòÉ 2.2.1. Version 3.00 ΓòÉΓòÉΓòÉ
  94.  
  95. o Support for debugging a child process. 
  96. o Support for debugging a child process over a null modem connection. 
  97. o Support for debugging a child process over a netbios connection. 
  98. o Support for debugging a child process over a phone line connection. 
  99. o Support for debugging a multiple process application. 
  100. o Support for debugging a multiple process application over a null modem 
  101.   connection. 
  102. o Support for debugging a multiple process application over a netbios 
  103.   connection. 
  104. o Support for debugging a multiple process application over a phone line 
  105.   connection. 
  106. o Ctrl-Break support for all child process configurations above. 
  107. o Ctrl-Break support for all multiple process application configurations above. 
  108. o Support for starting applications using DosExecPgm() instead of 
  109.   DosStartSession. 
  110. o Support for disabling Ctrl-Esc and Atl-Esc access to the desktop when 
  111.   debugging PM applications. 
  112.  
  113.  
  114. ΓòÉΓòÉΓòÉ 2.2.2. Version 2.00 ΓòÉΓòÉΓòÉ
  115.  
  116. o Support for debugging C programs written using C-Set++. 
  117. o Support for remote debugging over a com port. 
  118. o Addition of an Execution Services Probe(ESP) to the package. This is needed 
  119.   to support remote debug. 
  120. o Addition of a README.DOC to the package for details of version changes. 
  121. o Addition of Ctrl-Break handler. 
  122. o Addition of /r option to support bit rates from 300 to 38400. 
  123. o Addition of /a option to specify the com port for remote debugging. 
  124. o Addition of /o option to support remote debugging over a phone line. 
  125. o Addition of /p option to read SD386.PRO. This used to be default. 
  126. o Addition of /k option for keyboard only input. 
  127. o Addition of /u option to not flush the keyboard buffer. 
  128. o Addition of /m for viewing imported variables. 
  129. o Addition of /s option to allow you to not stop at main. 
  130. o Deleted  /o option to support old style interface. 
  131. o Addition of a go to line number option. 
  132. o Addition of a modem.ram file to the package. These are sample dial up 
  133. o command files. 
  134. o Modifications to cursor sensitive prompting. 
  135. o Improvements in the FormatVar pulldown. 
  136. o Improvements in the handling of the ALT and ESC keys. 
  137. o Improvements in SD386.PRO. 
  138. o Numerous bug fixes. See the README.DOC. 
  139.  
  140.  
  141. ΓòÉΓòÉΓòÉ 2.2.3. Version 1.02 ΓòÉΓòÉΓòÉ
  142.  
  143. o Addition of a CUA mouse driven interface while maintaining compatibility with 
  144.   the old style interface. 
  145. o Completely revised online help (available with the new interface). 
  146. o Fix for intermittant trap C stepping in 16 bit disassembly. 
  147. o Fix for display of 16 bit operands in use32 segment. 
  148. o Fix for not displaying 16 bit operands in disassembly view. 
  149. o Fix for trap when searching for functions with very long names. 
  150. o Fix for unwinding 16 bit call stack after an exception. 
  151. o Allow for unwinding up to 100 call stack frames (the old limit was 10 which 
  152.   was much too small for debugging PM apps). 
  153. o The addition of some more rigorous algorithms for unwinding call stacks. 
  154. o The addition of a "Show All" option to the call stack unwinding dialog. This 
  155.   option invokes the more rigorous algorithms. 
  156. o The addition of a "Show Named" option to the call stack unwinding dialog. 
  157.   This option invokes the more rigorous algorithm but filters stack frames 
  158.   without names. 
  159. o Fixes for Restart/Quit not cleaning up debuggee. 
  160. o Fix for trap D when debuggee gets an access violation at an unknown address. 
  161.  
  162.  
  163. ΓòÉΓòÉΓòÉ 2.2.4. Version 1.01 ΓòÉΓòÉΓòÉ
  164.  
  165. o Add watchpoint support with hardware debug registers. 
  166. o Debug Microsoft C 6.00 source with multiple code segments. 
  167.  
  168.  
  169. ΓòÉΓòÉΓòÉ 2.2.5. Version 1.00 ΓòÉΓòÉΓòÉ
  170.  
  171. o First release. 
  172.  
  173.  
  174. ΓòÉΓòÉΓòÉ 2.3. Further Information ΓòÉΓòÉΓòÉ
  175.  
  176. We maintain and monitor the SD86 FORUM on IBMPC. We encourage you to put any 
  177. suggestions or questions there. 
  178.  
  179.  
  180. ΓòÉΓòÉΓòÉ 2.3.1. Credits ΓòÉΓòÉΓòÉ
  181.  
  182. SD386 is supported by the Software Solutions organization in Lexington, KY. 
  183.  
  184. We would like to thank Jim Christensen, Alan Cole, and David Toll, of the IBM 
  185. T.J. Watson Research Lab, Hawthorne, NY, for their invaluable assistance in 
  186. producing SD386. Jim and Alan are the primary authors of the predecessor of 
  187. SD386. Without them, SD386 would not exist. Also, we would like to thank the 
  188. early users of SD386 and its predecessors for their feedback. 
  189.  
  190.  
  191. ΓòÉΓòÉΓòÉ 2.4. Requirements ΓòÉΓòÉΓòÉ
  192.  
  193. Hardware 
  194.  
  195. Computer: SD386 supports a computer running OS/2 2.x and runs in a text window 
  196. or full screen session. 
  197.  
  198. Software 
  199.  
  200. The following software is required: 
  201.  
  202. o OS/2 2.x 
  203.  
  204. o LOADRAM2 (from OS2TOOLS). 
  205.  
  206. o For PL/X-86 programs:  PL/X-86, AL/86, and DebObj. Use the most recent 
  207.   versions of PL/X-86, AL/86, and DebObj. When checking a potential problem, 
  208.   determine the version of each tool so CASS support can find out where the 
  209.   problem is: 
  210.  
  211.    Tool Name     How to Verify the Version 
  212.    PL/X-86       Browse the AL/86 output listing file. The version number is in 
  213.                  the last record. 
  214.    AL/86         Browse the AL/86 output listing file. The version number is in 
  215.                  the next-to-last record. 
  216.    DebObj        On the PC, browse the DebObj output object file. The ASCII 
  217.                  string "DEBOBJ" is near the top of the file. It is followed by 
  218.                  the version number, date, and a 16- or 32-bit designation. Use 
  219.                  the 32-bit DebObj to produce debug info for SD386 to use. 
  220.  
  221. o For 16-bit C programs:  IBM C/2 C compiler version 1.1 or Microsoft C 
  222.   compiler version 4.0 (or beyond). The Microsoft C6.00A compiler seems to 
  223.   produce more reliable debug information than earlier Microsoft compilers. 
  224.  
  225. o For 32-bit C programs:  IBM C Set/2 and IBM C-Set++ compilers. 
  226.  
  227. o You may also use the MASM assembler version 5 (or beyond) for routines called 
  228.   by your HLL program. 
  229.  
  230.  
  231. ΓòÉΓòÉΓòÉ 3. What's New for this Release ΓòÉΓòÉΓòÉ
  232.  
  233. The primary focus of this release is to move OS/2 source level debugging to a 
  234. higher level and address the need to debug complex OS/2 applications. Although 
  235. many OS/2 applications consist of a single parent process running in a 
  236. fullscreen, text, or PM session, there are many applications consisting of 
  237. multiple processes running in parent/children/grandchildren or peer-to-peer 
  238. configurations on single or multiple machines. Typically, the processes talk to 
  239. each other using some form of inter-process communication such as pipes, shared 
  240. memory, queues, semaphores, or network connections. While developers have 
  241. cleverly managed to debug some of these complex applications by modifying their 
  242. code to spawn a debugger which in turn starts the process to be debugged, this 
  243. does not always provide a viable solution. The developer may not have access to 
  244. the code that needs to be modified, or spawning the debugger may cause the 
  245. application to incur certain operating system restrictions that it would not 
  246. have otherwise incurred. Hopefully, this release of the SD386 Debugger and its 
  247. companion Execution Services Probe(ESP) in conjunction with enhanced remote 
  248. connectivity including async, netbios, local pipes, and modem-modem support 
  249. will go a long ways toward simplifying the task of debugging these complex OS/2 
  250. applications. While SD386 and ESP are somewhat larger, they still retain the 
  251. following advantages: 
  252.  
  253. o They are single executables requiring no dlls. (The dll needed for netbios 
  254.   support is loaded at runtime.) 
  255.  
  256. o There are no message files.  All messages are bound to the executables. 
  257.  
  258. o There is no installation.  Simply toss the debugger and the probe into your 
  259.   TOOLS subdirectory.  (If you use netbios you will have to install LAPS.) 
  260.  
  261. o Performance is maintained at a high level even for remote debugging 
  262.   configurations.  The probe has been designed to to minimize the impact of a 
  263.   remote connection on the overall performance of the debugger. 
  264.  
  265.  
  266. ΓòÉΓòÉΓòÉ 3.1. Single Parent Process Applications ΓòÉΓòÉΓòÉ
  267.  
  268. The support for multiple processes has also resulted in some enhancements worth 
  269. mentioning for single parent process applications. 
  270.  
  271. o You can now debug over a netbios connection. Many workstations have two 
  272.   machines connected to the lan so it makes sense to let you have a two machine 
  273.   source level debugging solution. You can use the same remote debugging 
  274.   methodology that you used for debugging over a null modem connection, or by 
  275.   adding peer services to get access to your program files you can effectively 
  276.   have dual screen debugging. 
  277.  
  278. o You can now debug a process when PM is not present.  Debuggers usually start 
  279.   the process to be debugged using DosStartSession(); however, 
  280.   DosStartSession() is not available before the Session Manager is running so 
  281.   the debugger cannot start the debuggee process.  This release allows you to 
  282.   start the process using DosExecPgm().  This support has been primarily 
  283.   intended for customers debugging the OS/2 installation program (who were 
  284.   previously using the kernel debugger) and for customers debugging the Session 
  285.   Manager, but general support for DosExecPgm() has been added since there may 
  286.   be other applications that may benefit. 
  287.  
  288. o You can now ctrl-break into a hung application over a remote connection.  The 
  289.   prior release of SD386 only allowed this for single machines. 
  290.  
  291. o Some other miscellaneous enhancements include a warning when you're starting 
  292.   a PM app from a text window in a single machine configuration and an option 
  293.   to turn off Ctrl-Esc and Alt-Esc access to the desktop. 
  294.  
  295.  
  296. ΓòÉΓòÉΓòÉ 3.2. Typical Solutions Provided by this Release ΓòÉΓòÉΓòÉ
  297.  
  298. Release 3.00 provides the following solutions: 
  299.  
  300.  
  301. ΓòÉΓòÉΓòÉ 3.2.1. Debugging a Minimally Booted System ΓòÉΓòÉΓòÉ
  302.  
  303. Since the last release there has been a need to source level debug the OS/2 
  304. installation program(s) that are used to install the operating system from 
  305. diskettes. 
  306.  
  307. Diskette 1 of the OS/2 installation diskettes contains a mini version of OS/2 
  308. with all the dlls and device drivers necessary to run the install programs 
  309. sysinst1.exe and sysinst2.exe.  If you examine the config.sys file on diskette 
  310. 1 you will see the statement: 
  311.  
  312.     protshell=sysinst1.exe
  313. which identifies the first application program to be started by OS/2. The 
  314. statement: 
  315.  
  316.     set os2_shell=sysinst2.exe
  317. defines the default command processor.  Changing the protshell statement to: 
  318.  
  319.      protshell=cmd.exe
  320. and rebooting will bring up a single fullscreen session and put the machine in 
  321. minimally booted state. 
  322.  
  323. If you wanted to debug the initial install program you might enter: 
  324.  
  325.     sd386 sysinst1
  326.  
  327. Unfortunately, this results in a DosStartSession() failure. SD386, by default, 
  328. uses DosStartSession() to start the application but DosStartSession() is not a 
  329. valid call in a minimally booted system. To fix this, support for starting the 
  330. application using DosExecPgm() was added. 
  331.  
  332. However, it turns out that adding the DosExecPgm() support still isn't 
  333. sufficient. DosExecPgm() will start the application as a child process of SD386 
  334. creating an environment with two processes trying to share the same screen and 
  335. keyboard. Obviously, this won't work and necessitates the use of the remote 
  336. support to put SD386 in a session of its own (on another machine). 
  337.  
  338. So, in the final analysis, by making a null modem connection between two 
  339. machines you can enter: 
  340.  
  341.      sd386 /r6 /e sysinst1.exe
  342. on the debugger machine and enter: 
  343.  
  344.      esp /r6
  345. on the probe (minimally booted) machine and debug at source level. 
  346.  
  347. Now, if for some reason there were a need to debug both installation programs 
  348. simultaneously you could build a process names file (maybe call it "procs") 
  349. with the following entries: 
  350.  
  351.        sysinst1
  352.        sysinst2
  353.  
  354. You would then enter on the debugger machine: 
  355.  
  356.      sd386 /r6 /e /b@procs sysinst1
  357. and on the probe machine you would enter: 
  358.  
  359.      esp /r6
  360.  
  361. SD386 would initially stop at main() in sysinst1.exe. Entering F5 to run would 
  362. eventually result in another copy of SD386 being generated for debugging 
  363. sysinst2.exe. 
  364.  
  365.  
  366. ΓòÉΓòÉΓòÉ 3.3. Improved Phone Line Support ΓòÉΓòÉΓòÉ
  367.  
  368. Phone line support gives you the ability to source level debug your 
  369. applications over a standard phone line connection. The Exes and Dlls at the 
  370. customer location do NOT have to be linked with debug information. If you keep 
  371. a local repository of Exes, Dlls, and source for the release level at the 
  372. customer site and if the local Exes and Dlls have been linked with debug info, 
  373. the debugger will take execution information from the remote probe (ESP) and 
  374. match it up with the information in your local repository. In this way, you can 
  375. securely debug your application running in the customer's environment without 
  376. exposing your source or executables with debug information. It's not likely 
  377. that you will use this support frequently, but there are times when customers 
  378. have problems that for one reason or another cannot be reproduced in a simple 
  379. test case. During the last year we have successfully used this support in 
  380. Lexington to debug some customer problems with our IPMD and EXTRA products. 
  381.  
  382. While this support is not new to this release, some improvements have been made 
  383. to make it easier to use. In the last release, you were forced to use a file of 
  384. modem commands in conjunction with the /o invocation option to both originate 
  385. and answer the call. Now, the file is optional. The debugger (SD386) will by 
  386. default send the standard modem commands needed to originate the call and then 
  387. prompt you for the phone number. The probe (ESP) will now send the commands to 
  388. answer the call. 
  389.  
  390.  
  391. ΓòÉΓòÉΓòÉ 3.4. Remote Debugging Over The LAN ΓòÉΓòÉΓòÉ
  392.  
  393. If you're connected to a lan, then you can debug an application running on 
  394. another lan attached machine. Here are a few typical configurations: 
  395.  
  396. o If you have two lan attached machines in your office, you can use the lan 
  397.   connection as an alternative to the null modem cable used between com ports. 
  398.   The LAN connection will improve the performance of your remote debugging 
  399.   since the lan connection is a faster interface. 
  400.  
  401. o Since you're attached to the lan you can have a common repository for source 
  402.   and executable files. This eliminates the need of having to match executables 
  403.   on the probe machine with the same executables containing debug information 
  404.   on the debugger machine. Simply set the SD386SRC environment variable on both 
  405.   the probe and the debugger machine to point to the LAN repository. This 
  406.   configuration may be used to debug an application running on a machine in a 
  407.   test lab, another machine in your office, or on the machine of another team 
  408.   member. 
  409.  
  410.   You might want to set up peer services and share files between machines. For 
  411.   example, you could start a peer server on your development machine and share 
  412.   your files with a test machine where your application will actually execute. 
  413.   When you're ready to debug, you can point the SD386SRC environment variable 
  414.   on the probe machine to the shared files. When you invoke the debugger, the 
  415.   probe will access executable files back on the development machine. If you 
  416.   prefer to run the debugger on the test machine, then simply do it, the same 
  417.   setup will work either way. 
  418.  
  419.   You will not need to install anything additional to your LAN software unless 
  420.   you're using peer services. The debugger and the probe make the connection 
  421.   between machines using the Netbios api services which come as part of the Lan 
  422.   Adapter Protocol Support(LAPS) and since LAPS is required as part of the Lan 
  423.   Requester installation, everything you need should already be installed. If 
  424.   you're configuring a new machine, however, just for setting up remote 
  425.   debugging, the Lan Requester is not required...just LAPS. 
  426.  
  427. o If you're going to use peer services, then some installation will be 
  428.   required. You may want to get your lan administrator to help you with this. 
  429.   Just to help a bit, I've written down the steps I followed. See Example of 
  430.   Installing Peer Services for my notes. 
  431.  
  432.  
  433. ΓòÉΓòÉΓòÉ 3.5. Relief for Message Queue and PM Resource Interlock Hangs ΓòÉΓòÉΓòÉ
  434.  
  435. There are essentially two types of hangs that you will encounter when debugging 
  436. OS/2 applications on a single machine:  message queue and PM resource 
  437. interlock. In prior releases, you had to be aware of these potential pitfalls 
  438. and remember to avoid them. In this release, a small amount of help has been 
  439. provided. Of course, the best way to avoid the hangs is to use one of the 
  440. remote debugging methods. 
  441.  
  442. A message queue hang occurs when a PM app does not respond to messages from the 
  443. operating system. This hang happens as follows. Before the operating system 
  444. reports a notification to the debugger, it puts your application to sleep and 
  445. waits for the debugger to execute another go or single-step command. While the 
  446. PM app is asleep it will not respond to messages from PM so if you Ctrl-Esc or 
  447. Alt-Esc to the desktop then the system will lock up waiting for your 
  448. application to respond to a message...but it can't, it's asleep. This has been 
  449. a problem with debugging PM apps from a fullscreen session since day one, and 
  450. although you eventually learn not to go to the desktop from the fullscreen 
  451. session, you will inadvertently do it from time to time. This release provides 
  452. an invocation option to let you block Ctrl-Esc and Alt-Esc access to the 
  453. desktop. 
  454.  
  455. A PM resource interlock occurs when one application holds a PM resource while 
  456. another application waits for the resource to become available. The resource is 
  457. generally protected with a semaphore and the hang results when one application 
  458. blocks holding the semaphore while another application waits for the semaphore 
  459. to be posted. The way this type of hang may happen when debugging is as 
  460. follows. As in the case of the message queue hang, before the operating system 
  461. reports a notification to the debugger it puts your application to sleep. The 
  462. application may have been put to sleep holding a PM resource, say a screen 
  463. semaphore. If the debugger also needs the resource to service the notification, 
  464. say to repaint the screen, then the system hangs. If you start SD386 in a text 
  465. window to debug a PM app, you will get this type of hang. If you run SD386 in a 
  466. fullscreen session, PM resource interlock is not a problem because SD386 
  467. doesn't use any PM resources. A small amount of help is provided by this 
  468. release in that you will get a fairly long winded warning if you inadvertently 
  469. ( or purposely) attempt to debug a PM app from a text window. 
  470.  
  471.  
  472. ΓòÉΓòÉΓòÉ 3.6. Breaking an Application Hang ΓòÉΓòÉΓòÉ
  473.  
  474. In the last release, Ctrl-Break support was added to let you break into an 
  475. application hang. The application could be blocked in the kernel or simply 
  476. stuck in a loop. However, if the entire machine locked up, you couldn't get to 
  477. the debugger screen to put in a Ctrl-Break. So, in this release the Ctrl-Break 
  478. support has been extended to all remote connections and to all debugging 
  479. configurations including parent, child, and multiple process applications? So 
  480. now, from a remote connection you should be able to break into an application 
  481. hang that also hangs the machine and get some clues about what's causing the 
  482. problem. 
  483.  
  484.  
  485. ΓòÉΓòÉΓòÉ 3.7. Child Process Debugging ΓòÉΓòÉΓòÉ
  486.  
  487. This release provides support for debugging a child process. Prior releases 
  488. only supported debugging a single parent process forcing developers to modify 
  489. their code to spawn a debugger that would debug the child process. This 
  490. technique has worked quite well; however, there are some problems that may make 
  491. the technique unusable. 
  492.  
  493. If the child process was originally spawned using DosExecPgm() then the 
  494. debugger has to be the same type of process as the original child. This is a 
  495. DosExecPgm() restriction that it can only spawn a process of the same type as 
  496. the parent. If the DosExecPgm() is changed to a DosStartSession() then the 
  497. parent-child relationship changes. The process started within the child session 
  498. is a child of the shell and not the original parent. 
  499.  
  500. In this release, you can simply name the child process that you want to debug 
  501. and when your application spawns the child the debugger will get control. You 
  502. can proceed with debugging as you would with any parent process.  Anything you 
  503. can do with a parent process you can do with the child including remote 
  504. debugging. 
  505.  
  506.  
  507. ΓòÉΓòÉΓòÉ 3.8. DosStartSession Returns Codes (RC=127) ΓòÉΓòÉΓòÉ
  508.  
  509. This release provides some information about the offending module when 
  510. DosStartSession() returns with a non-zero return code. In particular, an rc=127 
  511. sometimes returns from DosStartSession() when the application is started under 
  512. the debugger whereas the program appears to start normally when not started 
  513. under the debugger. There is currently a private version of SD386 floating 
  514. around that has been used to analyze this rc=127 failure. The private version 
  515. is no longer needed. 
  516.  
  517.  
  518. ΓòÉΓòÉΓòÉ 3.9. Debugging the Session Manager and the Workplace Shell ΓòÉΓòÉΓòÉ
  519.  
  520. OS/2 normally executes two instances of the PMSHELL.EXE program. If you browse 
  521. a typical CONFIG.SYS, you will see the first instance specified by the 
  522. PROTSHELL= statement. This is the Session Manager. The second instance 
  523. specified by the SET RUNWORKPLACE= statement is the Workplace Shell. If you 
  524. replace PMSHELL.EXE on both of these statements with CMD.EXE and reboot the 
  525. system, you will come back up in a single OS/2 session. There is no Session 
  526. Manager or Desktop. Executing PMSHELL at the initial OS/2 command prompt will 
  527. start the Session Manager and bring up a Workplace Shell window. Subsequently 
  528. executing PMSHELL in the Workplace Shell window will then bring up the 
  529. Workplace Shell. 
  530.  
  531. There is a need to debug these OS/2 components. You can debug the Workplace 
  532. Shell by starting PMSHELL under the debugger as follows: 
  533.  
  534.      START /FS SD386 PMSHELL
  535. This will start SD386 in a fullscreen session debugging PMSHELL.EXE. 
  536.  
  537. Debugging the Session Manager is a bit more involved in that it presents the 
  538. same problems as the minimally booted system discussed previously - 
  539. DosStartSession() is not available and using DosExecPgm() results in a trap in 
  540. DOSCALL1. To get around the problem you have to use a remote solution. You can 
  541. use either an async or a netbios connection. Netbios should be available if you 
  542. have previously installed LAPS. 
  543.  
  544. If, for some reason, you wanted to debug both the Session Manager and the 
  545. Workplace Shell simultaneously, then you could use a remote connection in 
  546. conjunction with the multiple process support. 
  547.  
  548.  
  549. ΓòÉΓòÉΓòÉ 3.10. Debugging Multiple Process Applications ΓòÉΓòÉΓòÉ
  550.  
  551. This release gives you the ability to debug multiple process applications on a 
  552. single machine or on two machines using a remote async or netbios connection. 
  553. You name the processes that you want to debug at invocation time. When your 
  554. application spawns one of the processes that you want to debug, a debugger and 
  555. a probe will be generated specifically for debugging that process. Debuggers 
  556. and probes are not generated for processes which are part of your application 
  557. but you choose not to debug. 
  558.  
  559. The connections generated between debuggers and probes will be serial or 
  560. parallel, somewhat analogous to the concept of serial and parallel cables. A 
  561. netbios connection represents a parallel connection in that each debugger-probe 
  562. gets a separate netbios session with its own resources and handles. When 
  563. running on a single machine, local pipes are used to provide the parallel 
  564. connectivity. The advantage of parallel connectivity is that each 
  565. debugger-probe runs independently, i.e., if you start the parent debugger in a 
  566. text window, then you will get a new debugger window on your desktop for each 
  567. process you've chosen to debug and you can simply click on a window to work 
  568. with any given process. 
  569.  
  570. The async connection represents a serial connection. In this case, you have the 
  571. additional task of connecting and disconnecting the debuggers since you will 
  572. only be able to work with one debugger-probe combination at a time. When you 
  573. click on a debugger window, you will notice messages on the debugger status 
  574. line indicating the state of the connection. 
  575.  
  576. The glue that binds the debuggers is the new Misc->Process pulldown. From this 
  577. pulldown you can select one of the processes you've chosen to debug and it will 
  578. take you to the debugger for that process. 
  579.  
  580. While this release provides several angles of attack for your multiple process 
  581. debugging requirements, you might want to give strong consideration to using a 
  582. remote (preferably netbios) solution for debugging multiple process PM 
  583. applications as this is likely to be the best match between the methods 
  584. available and the complexity of the task. 
  585.  
  586.  
  587. ΓòÉΓòÉΓòÉ 4. Before Beginning ΓòÉΓòÉΓòÉ
  588.  
  589. This chapter explains how to prepare your application for debugging and how to 
  590. install SD386. 
  591.  
  592.  
  593. ΓòÉΓòÉΓòÉ 4.1. Installing SD386 ΓòÉΓòÉΓòÉ
  594.  
  595. To install SD386, do the following: 
  596.  
  597.  1. Download the SD386.RAM file to your PC's hard disk. 
  598.  
  599.  2. Execute the following command to unpack the files: 
  600.  
  601.         LOADRAM2 SD386.RAM
  602.  
  603.     You should have the following files after unpacking: 
  604.  
  605.    SD386.EXE           SD386 debugger executable file. 
  606.    SD386.PRO           SD386 debugger profile file. 
  607.    ESP.EXE             Execution Services Probe for remote debugging. 
  608.    MODEM.RAM           Sample command files to use with /o option. 
  609.    README.DOC          Release details. 
  610.    SD386.INF           Documentation to use with view. 
  611.  
  612.  3. Define the SD386SRC environment variable if you want SD386 to use it as a 
  613.     path to your source or executable files. See Customizing the Environment 
  614.     for more information. 
  615.  
  616.  4. Customize the SD386.PRO if you use a profile. If not, simply toss it or put 
  617.     it somewhere for safe keeping. 
  618.  
  619.  
  620. ΓòÉΓòÉΓòÉ 4.2. Customizing the Environment ΓòÉΓòÉΓòÉ
  621.  
  622. The program and the data files must be available to SD386 just as when you run 
  623. your program by itself. You can set the SD386SRC environment variable and SD386 
  624. will use it to search for executable, source, and text files. SD386 searches 
  625. for your program's executable, source, and text files in this order: 
  626.  
  627.  1. path specified when entering the filename (browsing and invoking SD386), 
  628.     e.g., 
  629.  
  630.         c:\test\src\myvars.h
  631.  
  632.  2. the current directory, 
  633.  3. directory specified to the compiler (if any), 
  634.  4. the directories specified in the SD386SRC environment variable, and 
  635.  5. the directories in the system PATH. 
  636.  
  637. The SD386SRC environment variable is meant for use by persons whose source 
  638. files are not in the same directory as the resulting object files and are in a 
  639. directory that is not in the path. For example, if your source is contained in 
  640. C:\MYPROG\SRC and your object and EXE files are in C:\MYPROG\OBJ, and if 
  641. \MYPROG\SRC is not in the path and is not the current directory, then you 
  642. should set the SD386SRC environment variable to C:\MYPROG\SRC before invoking 
  643. SD386. To set or reset this environment variable, enter a command similar to 
  644. this one at the OS/2 prompt: 
  645.  
  646. SET SD386SRC=C:\MYPROG\SRC
  647.  
  648.  
  649. ΓòÉΓòÉΓòÉ 4.3. Preparing a Program ΓòÉΓòÉΓòÉ
  650.  
  651. To prepare a program, you must compile and link the program with the proper 
  652. options. 
  653.  
  654.  
  655. ΓòÉΓòÉΓòÉ 4.3.1. Compiling Applications Using IBM C Set/2 Compiler ΓòÉΓòÉΓòÉ
  656.  
  657. The following options need to be specified for the IBM C Set/2 compiler: 
  658.  
  659. /Ti         Include debugging information in the module's run file (.obj). 
  660.  
  661. /O-         Disable optimization. 
  662.  
  663.             Note:  Optimized code tends to have code movement which makes it 
  664.             difficult to associate machine code reliably with its corresponding 
  665.             source line number. Therefore, we suggest that initial testing and 
  666.             debugging of a module be on non-optimized code. 
  667.  
  668.             Note:  You may also wish to use the Extra execution trace analysis 
  669.             tool to analyze the behavior of your IBM C Set/2 programs. To do 
  670.             so: 
  671.  
  672. /Gh         Include the hook code to allow Extra to monitor your module. This 
  673.             option has no effect on SD386. 
  674.  
  675.  
  676. ΓòÉΓòÉΓòÉ 4.3.2. Compiling Applications Using Microsoft C Compiler ΓòÉΓòÉΓòÉ
  677.  
  678. The following options need to be specified for the Microsoft C compiler: 
  679.  
  680. /Zi         Include debugging information in the module's run file (.obj). 
  681.  
  682. /Od         Disable optimization. 
  683.  
  684.             Note:  Do not use the quick compile or incremental link options 
  685.             with Microsoft C. 
  686.  
  687.             Note:  Optimized code tends to have code movement which makes it 
  688.             difficult to associate machine code reliably with its corresponding 
  689.             source line number. Therefore, we suggest that initial testing and 
  690.             debugging of a module be on non-optimized code. 
  691.  
  692.  
  693. ΓòÉΓòÉΓòÉ 4.3.3. Compiling Applications Using PL/X-86 Compiler ΓòÉΓòÉΓòÉ
  694.  
  695. The following options need to be specified for the PL/X-86 compiler: 
  696.  
  697. LOGIC       Include debugging information in the module's SYSLOGIC file. 
  698.  
  699.  
  700. ΓòÉΓòÉΓòÉ 4.3.4. Linking a Program ΓòÉΓòÉΓòÉ
  701.  
  702. The Link386 options are: 
  703.  
  704. /CO or /DE  This causes the linker to include debugging information in the 
  705.             application's run file (.EXE or .DLL). 
  706.  
  707.  
  708. ΓòÉΓòÉΓòÉ 5. Getting Started ΓòÉΓòÉΓòÉ
  709.  
  710. This chapter discusses how to start and use SD386. It describes the SD386 
  711. windows and menus. 
  712.  
  713.  
  714. ΓòÉΓòÉΓòÉ 5.1. Starting SD386 ΓòÉΓòÉΓòÉ
  715.  
  716. To start SD386 from the OS/2 command prompt, enter the SD386 command, any SD386 
  717. options, and the command you normally use to run your program. For example, if 
  718. you type 
  719.  
  720.             filename input.dat /fileopt
  721. to run your program, then to run your program under the control of SD386, you 
  722. would type the following and then press Enter. 
  723.  
  724.             SD386 filename input.dat /fileopt
  725.  
  726. The full description of the command syntax is: 
  727.  
  728. SD386  [Options]  [Program Name] [Program Arguments]
  729.  
  730. options       may be any of the following. Each option must be prefaced with a 
  731.               dash (-) or a slash (/). 
  732.  
  733.    /h or /?  Print this help screen. 
  734.  
  735.    /p        Read SD386.PRO. 
  736.  
  737.    /c        Force case sensitivity for public names. 
  738.  
  739.    /i        Debug initialization code. 
  740.  
  741.    /f        Run debuggee in full screen session. 
  742.  
  743.    /w        Run debuggee in text window session. 
  744.  
  745.    /k        Keyboard only (no mouse). 
  746.  
  747.    /u        Do not flush keyboard buffer. 
  748.  
  749.    /m        Resolve imports. 
  750.  
  751.    /oFilespec Makes a phone line connection to a remote esp. (See notes 
  752.              regarding optional Filespec.) 
  753.  
  754.    /r[n]     Remote debug: 
  755.  
  756.                               n=0   1    2    3    4    5     6
  757.                           speed=300 1200 2400 4800 9600 19200 38400
  758.  
  759.    /an       Which Com(Async) port. For example, /a1 uses COM1: 
  760.  
  761.    /s        Don't stop at "main" entry point. 
  762.  
  763.    /e        Use DosExecPgm() to start the debuggee. 
  764.  
  765.    /b[@]Filespec Debug the child process specified by Filespec. If Filespec is 
  766.              prefixed with @, then debug all the precesses specified (one per 
  767.              line) in the file. 
  768.  
  769.    /nAname   Remote debug over a netbios connection. Aname is any logical name. 
  770.              Use the same name on both the debug and the probe machines. 
  771.  
  772.    /x        Disable Ctrl-Esc and Atl-Esc. If abnormal termination leaves 
  773.              Ctrl-Esc and Atl-Esc disabled, then SD386 /x will turn them back 
  774.              on. 
  775.  
  776. program name  the name of the EXE file you wish to debug. 
  777.  
  778.               SD386 will attempt to set the first breakpoint at the address of 
  779.               the main function of your program. Note that special start-up and 
  780.               initialization code can get in the way of this process. 
  781.  
  782.               For C programs, the standard C arguments argc, argv, and envp 
  783.               will be passed to your program. The same is true for PL/X-86 
  784.               programs that use the C run-time library. PL/X-86 programs that 
  785.               are not using the C run-time library should use the DosGetEnv API 
  786.               to get the invocation parameters and environment. 
  787.  
  788. arguments     lists the standard input character strings passed to the main 
  789.               procedure or function. 
  790.  
  791. Note:  You should run SD386 from a full-screen session if you are debugging a 
  792. PM application. This lessens the chance of a lockup due to PM message queue 
  793. traffic problems. See Presentation Manager Limitations for more information. 
  794.  
  795. Note:  The correspondence between machine code and source file line number is 
  796. taken from the object file when this information is generated by the /Zd or /Zi 
  797. option (for MS C), the /Ti option (for IBM C Set/2) or by the LOGIC option (for 
  798. PL/X-86). The debugger is only as accurate as the information provided by the 
  799. compiler. 
  800.  
  801. After some initialization, SD386 displays its screen. The screen contains the 
  802. menu bar and the Source window. From this window, you can perform all of the 
  803. SD386 debugging functions as well as invoke the other windows. 
  804.  
  805. Note:  Online help is available throughout SD386 for each window, menu, and 
  806. pulldown option. You can get help from the Help pulldown menu or by pressing 
  807. F1. 
  808.  
  809.  
  810. ΓòÉΓòÉΓòÉ 5.2. Using the Source Window ΓòÉΓòÉΓòÉ
  811.  
  812. The Source window is the main window of SD386 and displays the source code for 
  813. the module you are debugging. When you start SD386, it sets a breakpoint at the 
  814. main entry point of your program (unless you have asked SD386 to debug 
  815. initialization code with the /i option). Executable lines are highlighted and 
  816. non-executable lines are not highlighted. The line that is about to be executed 
  817. and lines with breakpoints set on them are shown with different background 
  818. colors. Combinations of these attributes can occur for a breakpoint line at 
  819. which execution is currently halted. In these cases, SD386 mixes the two 
  820. attributes as appropriate. 
  821.  
  822. Note:  You can change the color settings for the various fields in the Colors 
  823. pulldown in the Settings menu. The color options are described in Colors. 
  824.  
  825.  
  826. ΓòÉΓòÉΓòÉ 5.3. Interacting with SD386 ΓòÉΓòÉΓòÉ
  827.  
  828. You interact with SD386 by using the keyboard and/or the mouse. SD386 has a 
  829. full set of accelerator keys for menus and pulldowns. SD386 functions primarily 
  830. from the Source window and the Menu Bar. Other windows can be popped up or 
  831. pulled down as appropriate. The Data window can share the screen with the 
  832. Source window and can be sized appropriately. 
  833.  
  834.  
  835. ΓòÉΓòÉΓòÉ 5.4. Using the Menu Bar ΓòÉΓòÉΓòÉ
  836.  
  837. The Menu Bar contains most of the debugging functions of SD386. You can get to 
  838. the Menu Bar with the mouse or with the accelerator key F10. The ExpressBar 
  839. function (default Esc key) will take you immediately to the File pulldown. The 
  840. Menu Bar is divided into several menus. Each of these menus has pulldowns 
  841. containing the various functions. Accelerator keys are available for most of 
  842. the pulldowns. The menus and their pulldowns are discussed in detail in Menu 
  843. Bar Functions. 
  844.  
  845.  
  846. ΓòÉΓòÉΓòÉ 6. Menu Bar Functions ΓòÉΓòÉΓòÉ
  847.  
  848. This chapter discusses the functions available in the Menu Bar. They are 
  849. discussed in the same order as they appear in the Menu Bar. This information is 
  850. also available in the online context-sensitive help for each pulldown menu. 
  851.  
  852.  
  853. ΓòÉΓòÉΓòÉ 6.1. File Pulldown ΓòÉΓòÉΓòÉ
  854.  
  855. The File pulldown contains functions dealing with getting and finding 
  856. debuggable things (functions, addresses, files, and the execution point), 
  857. moving around the ring of files, and restarting or exiting SD386. Here are the 
  858. functions available on the File pulldown: 
  859.  
  860. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  861. Γöé PULLDOWN           Γöé ACTION                     Γöé
  862. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  863. Γöé Get Function...        Γöé Locates the source file for a function.    Γöé
  864. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  865. Γöé Get Address...        Γöé Locates an address.              Γöé
  866. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  867. Γöé Get File...          Γöé Opens a source file.              Γöé
  868. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  869. Γöé Find Function         Γöé Locates the source file for a function.    Γöé
  870. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  871. Γöé Find Exec Line        Γöé Locates the current execution line.      Γöé
  872. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  874. Γöé Next File           Γöé Gets the next file in the source file ring.  Γöé
  875. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  876. Γöé Drop File           Γöé Drops the current file from the source file  Γöé
  877. Γöé                Γöé ring.                     Γöé
  878. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  879. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  880. Γöé Browse File...        Γöé Browses a file.                Γöé
  881. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  882. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  883. Γöé Restart            Γöé Restarts the target application.        Γöé
  884. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  885. Γöé Quit             Γöé Ends the debugger.               Γöé
  886. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  887.  
  888.  
  889. ΓòÉΓòÉΓòÉ 6.1.1. Get Function ΓòÉΓòÉΓòÉ
  890.  
  891. Locates the source file that contains the definition of the function you 
  892. specify and adds the source file to the ring of source files. 
  893.  
  894. Once a DLL is attached, you can use Get Function to display the source for the 
  895. DLL's functions. For run-time DLLs, the DLL is not attached until the 
  896. DosLoadModule function has been executed. 
  897.  
  898. To get around this constraint for run-time DLLs, i.e., to be able to view 
  899. source, set breakpoints, etc., before the DLL is attached, you can force the 
  900. DLL to be attached at start-up time by importing one of the function names in 
  901. the module definition file for the EXE file. For example: 
  902.  
  903. NAME EXENAME
  904. PROTMODE
  905. IMPORTS
  906.      FUNCNAME=DLLNAME.FUNCNAME
  907.  
  908. Note:  This should be a temporary import for debugging purposes only. It does 
  909. change your DLL from being a run-time DLL to being statically linked. 
  910.  
  911. SD386 allows you to use Get Function even if the main EXE file is not linked 
  912. with debug info. This allows you to debug a DLL that is linked with debug info 
  913. from an EXE that is not linked with debug info. 
  914.  
  915. See Debugging DLLs for more info about debugging dynamically linked (run-time) 
  916. DLLs. 
  917.  
  918.  
  919. ΓòÉΓòÉΓòÉ 6.1.2. Get Address ΓòÉΓòÉΓòÉ
  920.  
  921. Locates the source file and line number containing the specified address and 
  922. adds the source file to the ring of files. If source is not available then a 
  923. disassembly view will be shown. 
  924.  
  925.  
  926. ΓòÉΓòÉΓòÉ 6.1.3. Get File ΓòÉΓòÉΓòÉ
  927.  
  928. Locates the file specified looking first in the ring of files and then in the 
  929. list of files linked with the /CO or /DE debug option. Get File also adds the 
  930. specified source file to the ring. After adding a source file to the ring with 
  931. Get File, SD386 treats it like any other source file. You can set breakpoints 
  932. and perform any of the other source functions of SD386 in the file. 
  933.  
  934.  
  935. ΓòÉΓòÉΓòÉ 6.1.4. Find Function ΓòÉΓòÉΓòÉ
  936.  
  937. Locates the source file that contains the function on which the cursor is 
  938. placed and adds the source file to the ring of source files. 
  939.  
  940.  
  941. ΓòÉΓòÉΓòÉ 6.1.5. Find Exec Line ΓòÉΓòÉΓòÉ
  942.  
  943. This function brings the currently executing line (Exec Line) into view and 
  944. places the cursor on that line.  If the cursor is already on the Exec Line, 
  945. then this function will take you to the next line to be executed in the 
  946. previous stack frame and place the cursor on that line.  Subsequent executions 
  947. will continue to take you to previous stack frames until you return to the Exec 
  948. Line. Effectively, this function lets you walk the stack in a ring like fashion 
  949. adding a file for each stack frame to the ring of files. 
  950.  
  951.  
  952. ΓòÉΓòÉΓòÉ 6.1.6. Next File ΓòÉΓòÉΓòÉ
  953.  
  954. Switches to the next file in the ring of source files. 
  955.  
  956.  
  957. ΓòÉΓòÉΓòÉ 6.1.7. Drop File ΓòÉΓòÉΓòÉ
  958.  
  959. If the current file does not define the currently executing procedure, then 
  960. Drop File will remove the file from the ring of files. 
  961.  
  962.  
  963. ΓòÉΓòÉΓòÉ 6.1.8. Browse File ΓòÉΓòÉΓòÉ
  964.  
  965. Loads a file for browsing. 
  966.  
  967. The Browse window provides a set of simple file browsing functions. As in a 
  968. typical file browser, you can move up and down in the file. You can also locate 
  969. text. 
  970.  
  971. To enter the Browse window, press F11 in the Source or Data window or use the 
  972. Browse pulldown in the File menu. SD386 presents a prompt for you to fill in 
  973. the name of a file to be browsed. You can enter a simple filename or provide a 
  974. path with the filename. Press F1 while on the prompt line for an explanation of 
  975. the search order for the text file. 
  976.  
  977. Browse Window Keyboard Functions 
  978.  
  979. Key Input       If you want to 
  980. Down Arrow      Cursor down one line. 
  981. Up Arrow        Cursor up one line. 
  982. PgDn            Scroll down. 
  983. PgUp            Scroll up. 
  984. Ctrl-PgDn       Bot of screen. 
  985. Ctrl-PgUp       Top of screen. 
  986. Ctrl-Home       Top of file. 
  987. Ctrl-End        End of file. 
  988. / or F          Find. 
  989. R               Repeat find. 
  990. Esc             Leave browse. 
  991. F1              Help. 
  992.  
  993.  
  994. ΓòÉΓòÉΓòÉ 6.1.9. Restart ΓòÉΓòÉΓòÉ
  995.  
  996. Reloads and restarts the target application.  Breakpoints and the contents of 
  997. the Data window are retained. Data items from DLLs are removed because their 
  998. status after a restart is uncertain. 
  999.  
  1000.  
  1001. ΓòÉΓòÉΓòÉ 6.1.10. Quit ΓòÉΓòÉΓòÉ
  1002.  
  1003. Ends the debugger. When debugging remote, you will be given the option to 
  1004. terminate the Execution Services Probe(ESP.EXE). 
  1005.  
  1006.  
  1007. ΓòÉΓòÉΓòÉ 6.2. Run Pulldown ΓòÉΓòÉΓòÉ
  1008.  
  1009. The Run pulldown contains functions for running and single stepping the target 
  1010. application. Here are the functions available on the Run pulldown: 
  1011.  
  1012. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1013. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1014. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1015. Γöé Run              Γöé Runs the target program.            Γöé
  1016. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1017. Γöé Single Step          Γöé Executes the current line.           Γöé
  1018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1019. Γöé Step Into           Γöé Steps into a function call.          Γöé
  1020. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1021. Γöé Run To Cursor         Γöé Runs up to the cursor line.          Γöé
  1022. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1023. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1024. Γöé Run NoSwap          Γöé Runs the program, no screen swap.       Γöé
  1025. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1026. Γöé Single Step NoSwap      Γöé Executes the current line, no screen swap.   Γöé
  1027. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1028. Γöé Step Into NoSwap       Γöé Steps into a function, no screen swap.     Γöé
  1029. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1030. Γöé Run To Cursor NoSwap     Γöé Runs up to the cursor line, no screen swap.  Γöé
  1031. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1032. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1033. Γöé Set Exec Line         Γöé Sets current line as the next executable.   Γöé
  1034. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1035.  
  1036.  
  1037. ΓòÉΓòÉΓòÉ 6.2.1. Run ΓòÉΓòÉΓòÉ
  1038.  
  1039. Runs the program until a breakpoint is hit, an exception occurs, or the end of 
  1040. the program is reached. 
  1041.  
  1042.  
  1043. ΓòÉΓòÉΓòÉ 6.2.2. Single Step ΓòÉΓòÉΓòÉ
  1044.  
  1045. Executes the current source line (as defined by your compiler). If the current 
  1046. line calls other procedures, they will executed but will not be traced.  Use 
  1047. the Step Into function to trace calls to other procedures as well. 
  1048.  
  1049.  
  1050. ΓòÉΓòÉΓòÉ 6.2.3. Step Into ΓòÉΓòÉΓòÉ
  1051.  
  1052. Executes the current source line. If the current line calls other procedures, 
  1053. they will also be traced. 
  1054.  
  1055. Note:  When you step into a function, parameters and the call stack will not be 
  1056. displayed correctly until the function prologue code is executed. This 
  1057. generally involves stepping one additional statement. 
  1058.  
  1059.  
  1060. ΓòÉΓòÉΓòÉ 6.2.4. Run To Cursor ΓòÉΓòÉΓòÉ
  1061.  
  1062. Sets a one-time breakpoint on the line containing the cursor and executes the 
  1063. program.  If the cursor line is not hit during the run, a one-time breakpoint 
  1064. is set on the line to be hit on the next run. 
  1065.  
  1066.  
  1067. ΓòÉΓòÉΓòÉ 6.2.5. Run NoSwap ΓòÉΓòÉΓòÉ
  1068.  
  1069. Runs the program in the background until a breakpoint is hit, an exception 
  1070. occurs, or the end of the program is reached. 
  1071.  
  1072.  
  1073. ΓòÉΓòÉΓòÉ 6.2.6. Single Step NoSwap ΓòÉΓòÉΓòÉ
  1074.  
  1075. Executes the current source line (as defined by your compiler) in the 
  1076. background.  If the current line calls other procedures, they will executed but 
  1077. will not be traced.  Use the Step Into function to trace calls to other 
  1078. procedures as well. 
  1079.  
  1080.  
  1081. ΓòÉΓòÉΓòÉ 6.2.7. Step Into NoSwap ΓòÉΓòÉΓòÉ
  1082.  
  1083. Executes the current source line in the background.  If the current line calls 
  1084. other procedures, they will also be traced. 
  1085.  
  1086.  
  1087. ΓòÉΓòÉΓòÉ 6.2.8. Run To Cursor NoSwap ΓòÉΓòÉΓòÉ
  1088.  
  1089. Sets a one-time breakpoint on the line containing the cursor and executes the 
  1090. program in the background.  If the cursor line is not hit during the run, a 
  1091. one-time breakpoint is set on the line to be hit on the next run. 
  1092.  
  1093.  
  1094. ΓòÉΓòÉΓòÉ 6.2.9. Set Exec Line ΓòÉΓòÉΓòÉ
  1095.  
  1096. Sets the current execution line to the line containing the cursor. 
  1097.  
  1098.  
  1099. ΓòÉΓòÉΓòÉ 6.3. Breakpoints Pulldown ΓòÉΓòÉΓòÉ
  1100.  
  1101. The Breakpoints pulldown contains functions for setting and clearing various 
  1102. kinds of breakpoints. Here are the functions available on the Breakpoints 
  1103. pulldown: 
  1104.  
  1105. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1106. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1107. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1108. Γöé Set/Clear on Cursor      Γöé Sets a breakpoint at the cursor.        Γöé
  1109. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1110. Γöé Set Conditional on Cursor... Γöé Sets a cond'l breakpoint at the cursor.    Γöé
  1111. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1112. Γöé Function entry...       Γöé Sets a breakpoint on a function.        Γöé
  1113. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1114. Γöé Address...          Γöé Sets a breakpoint on an address.        Γöé
  1115. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1116. Γöé Clear All Breaks       Γöé Clears all breakpoints.            Γöé
  1117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1118. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1119. Γöé Hardware Debug Regs...    Γöé Sets watchpoints.               Γöé
  1120. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1121.  
  1122.  
  1123. ΓòÉΓòÉΓòÉ 6.3.1. Set/Clear on Cursor ΓòÉΓòÉΓòÉ
  1124.  
  1125. Sets or resets a breakpoint on the line selected by the cursor. Only 
  1126. highlighted lines (as determined by the line numbers generated by your 
  1127. compiler) may be selected.  Clearing a breakpoint from this screen clears all 
  1128. breakpoints for that line. 
  1129.  
  1130. If debugging at source level, you may notice that not all lines may be selected 
  1131. for breakpoints. This is due to your compiler, which generates a table of line 
  1132. numbers versus module addresses. The debugger can set breakpoints only on those 
  1133. lines that have an entry in this table (for example, you cannot set breakpoints 
  1134. on comments, some declarations, some terminating braces, nor various other 
  1135. places). 
  1136.  
  1137. Note:  See Notes for PL/X-86 Programs for exceptions to these rules. 
  1138.  
  1139.  
  1140. ΓòÉΓòÉΓòÉ 6.3.2. Set Conditional on Cursor ΓòÉΓòÉΓòÉ
  1141.  
  1142. Sets a conditional breakpoint on the line selected by the cursor.  Only 
  1143. highlighted lines (as determined by the line numbers generated by your 
  1144. compiler) may be selected.  Clearing a breakpoint from this screen clears all 
  1145. breakpoints for that line. 
  1146.  
  1147. Your program does not always stop at a conditional breakpoint. It stops only 
  1148. when the condition that you specify is true. You might, for example, want to 
  1149. stop in a program loop only after 50 iterations. You could specify a breakpoint 
  1150. with something like i > 50 as the condition, where i is a loop counter used in 
  1151. your program. Note that the condition is evaluated each time control reaches 
  1152. the breakpoint. 
  1153.  
  1154. The condition should be in the following form: 
  1155.  
  1156. <variable>  <operator>  <constant>
  1157.  
  1158. where:
  1159.   <variable> is a variable or register expression;
  1160.   <operator> is one of <, >, ==, <=, >=, or !=;
  1161.   <constant> is a constant expression.
  1162. Refer to Formulas and Expressions for a complete description of expressions. 
  1163.  
  1164.  
  1165. ΓòÉΓòÉΓòÉ 6.3.3. Function Entry ΓòÉΓòÉΓòÉ
  1166.  
  1167. Sets a breakpoint on a function by name. If the name is not know by the 
  1168. debugger, as might be the case when debugging dynamically loaded or load on 
  1169. call dlls, then you will be given the option to defer the breakpoint until the 
  1170. dll is loaded. This is a feature of SD386 generally referred to as "deferred 
  1171. breakpoints." 
  1172.  
  1173.  
  1174. ΓòÉΓòÉΓòÉ 6.3.4. Address ΓòÉΓòÉΓòÉ
  1175.  
  1176. Sets a breakpoint on a given address. 
  1177.  
  1178.  
  1179. ΓòÉΓòÉΓòÉ 6.3.5. Clear All Breaks ΓòÉΓòÉΓòÉ
  1180.  
  1181. Clears all breakpoints in the target program. This clears all types of 
  1182. breakpoints in the target program. 
  1183.  
  1184.  
  1185. ΓòÉΓòÉΓòÉ 6.3.6. Hardware Debug Registers ΓòÉΓòÉΓòÉ
  1186.  
  1187. Brings up the watchpoint menu, which allows you to enter expressions for up to 
  1188. 4 watchpoints.  These watchpoints use the hardware debug registers of the Intel 
  1189. chip. See Watchpoint Window Details for details. 
  1190.  
  1191.  
  1192. ΓòÉΓòÉΓòÉ 6.4. Search Pulldown ΓòÉΓòÉΓòÉ
  1193.  
  1194. The Search pulldown contains functions for locating text strings. Here are the 
  1195. functions available on the Search pulldown: 
  1196.  
  1197. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1198. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1199. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1200. Γöé Find...            Γöé Finds a specified string in the current    Γöé
  1201. Γöé                Γöé source file.                  Γöé
  1202. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1203. Γöé RepeatFind          Γöé Repeats the previous find command.       Γöé
  1204. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1205.  
  1206.  
  1207. ΓòÉΓòÉΓòÉ 6.4.1. Find ΓòÉΓòÉΓòÉ
  1208.  
  1209. Find searches the current source file for a string. The find function 
  1210. highlights the found string and indicates when it wraps from the bottom to the 
  1211. top of the file. You can use a "/" as an express key to the Find dialog. 
  1212. Subsequently, you can use "R" as an express key for a repeat find. 
  1213.  
  1214.  
  1215. ΓòÉΓòÉΓòÉ 6.4.2. RepeatFind ΓòÉΓòÉΓòÉ
  1216.  
  1217. Repeats the find command with the previous string entered. You can use "R" as 
  1218. an express key for a repeat find. 
  1219.  
  1220.  
  1221. ΓòÉΓòÉΓòÉ 6.5. Data Pulldown ΓòÉΓòÉΓòÉ
  1222.  
  1223. The Data pulldown contains functions that deal with items in the Data window. 
  1224. Details about the Data window, formulas and expressions, formula syntax, data 
  1225. formats, and data expansion are in Data Window Details. Here are the functions 
  1226. available on the Data pulldown: 
  1227.  
  1228. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1229. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1230. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1231. Γöé Show Var           Γöé Shows the value of the variable at the     Γöé
  1232. Γöé                Γöé cursor.                    Γöé
  1233. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1234. Γöé Show Var->          Γöé Shows the contents of the pointer variable   Γöé
  1235. Γöé                Γöé selected by the cursor.            Γöé
  1236. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1237. Γöé Watch Var           Γöé Adds the variable to the Data window.     Γöé
  1238. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1239. Γöé Watch Var->          Γöé Adds the contents of the pointer variable to  Γöé
  1240. Γöé                Γöé the Data window.                Γöé
  1241. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1242. Γöé Expand Var          Γöé Expands the variable in the Data Expansion   Γöé
  1243. Γöé                Γöé window.                    Γöé
  1244. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1245. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1246. Γöé Edit Expression        Γöé Edits the expression.             Γöé
  1247. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1248. Γöé Edit Storage         Γöé Edits the storage displayed in the Data    Γöé
  1249. Γöé                Γöé window.                    Γöé
  1250. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1251. Γöé Format Var          Γöé Shows menu bar of choices for the format of  Γöé
  1252. Γöé                Γöé the display of the data.            Γöé
  1253. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1254. Γöé Remove Var          Γöé Removes a variable from the Data window.    Γöé
  1255. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1256. Γöé Insert            Γöé Inserts a variable in the Data window.     Γöé
  1257. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1258.  
  1259.  
  1260. ΓòÉΓòÉΓòÉ 6.5.1. Show Var ΓòÉΓòÉΓòÉ
  1261.  
  1262. Shows the value of the variable selected by the cursor. The variable is 
  1263. displayed at the bottom of the Source window. 
  1264.  
  1265.  
  1266. ΓòÉΓòÉΓòÉ 6.5.2. ShowVar-> ΓòÉΓòÉΓòÉ
  1267.  
  1268. Shows the contents of the pointer variable selected by the cursor. The variable 
  1269. is displayed at the bottom of the Source window. 
  1270.  
  1271.  
  1272. ΓòÉΓòÉΓòÉ 6.5.3. Watch Var ΓòÉΓòÉΓòÉ
  1273.  
  1274. Adds the variable selected by the cursor to the Data window. 
  1275.  
  1276.  
  1277. ΓòÉΓòÉΓòÉ 6.5.4. Watch Var-> ΓòÉΓòÉΓòÉ
  1278.  
  1279. Adds the pointer variable selected by the cursor to the Data window. 
  1280.  
  1281.  
  1282. ΓòÉΓòÉΓòÉ 6.5.5. Expand Var ΓòÉΓòÉΓòÉ
  1283.  
  1284. Expands the view of a variable such as a member of a structure or union.  If 
  1285. the member is a structure or union, its components will be displayed in the 
  1286. Data Expansion window.  If the member is a pointer to another structure, etc., 
  1287. the contents of the variable pointed to by the pointer will be displayed in the 
  1288. Data Expansion window. 
  1289.  
  1290.  
  1291. ΓòÉΓòÉΓòÉ 6.5.6. Edit Expression ΓòÉΓòÉΓòÉ
  1292.  
  1293. Allows you to edit the expression (formula) which defines what is displayed by 
  1294. SD386.  One you have changed the expression, press Enter to cause SD386 to 
  1295. handle the expression or press Esc to leave the expression alone. 
  1296.  
  1297.  
  1298. ΓòÉΓòÉΓòÉ 6.5.7. Edit Storage ΓòÉΓòÉΓòÉ
  1299.  
  1300. Allows you to edit the value of the storaged displayed by SD386. Once you have 
  1301. changed the value, press Enter to alter the actual contents of memory or press 
  1302. Esc to leave the contents alone. 
  1303.  
  1304.  
  1305. ΓòÉΓòÉΓòÉ 6.5.8. Format Var ΓòÉΓòÉΓòÉ
  1306.  
  1307. Formats a variable in the Data window according to the format specified.  A 
  1308. menu will be displayed to choose default formats or enter the format type of 
  1309. the variable. 
  1310.  
  1311.  
  1312. ΓòÉΓòÉΓòÉ 6.5.9. Remove Var ΓòÉΓòÉΓòÉ
  1313.  
  1314. Removes the variable selected by the cursor from the Data window. 
  1315.  
  1316.  
  1317. ΓòÉΓòÉΓòÉ 6.5.10. Insert ΓòÉΓòÉΓòÉ
  1318.  
  1319. Inserts the variable selected by the cursor in the Data window. 
  1320.  
  1321.  
  1322. ΓòÉΓòÉΓòÉ 6.6. View Pulldown ΓòÉΓòÉΓòÉ
  1323.  
  1324. The View pulldown contains functions dealing with windows and views within the 
  1325. Source window. Here are the functions available on the View pulldown: 
  1326.  
  1327. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1328. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1329. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1330. Γöé Source            Γöé Switches to source view.            Γöé
  1331. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1332. Γöé Assembler           Γöé Switches to assembly view.           Γöé
  1333. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1334. Γöé Data             Γöé Switches to the Data window.          Γöé
  1335. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1336. Γöé Data Show/Hide        Γöé Display/Hide the Data window.         Γöé
  1337. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1338. Γöé Timed Show App        Γöé Shows the application screen for few seconds. Γöé
  1339. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1340.  
  1341.  
  1342. ΓòÉΓòÉΓòÉ 6.6.1. Source ΓòÉΓòÉΓòÉ
  1343.  
  1344. Switches to the source view in the Source window.  This option is disabled if 
  1345. the current view is already the source view. 
  1346.  
  1347.  
  1348. ΓòÉΓòÉΓòÉ 6.6.2. Assembler ΓòÉΓòÉΓòÉ
  1349.  
  1350. Switches to the assembly view in the Source window. This option is disabled if 
  1351. the current view is already the assembly view. 
  1352.  
  1353.  
  1354. ΓòÉΓòÉΓòÉ 6.6.3. Data ΓòÉΓòÉΓòÉ
  1355.  
  1356. Switches to the Data window. This option is disabled if the current window is 
  1357. already the Data window. 
  1358.  
  1359.  
  1360. ΓòÉΓòÉΓòÉ 6.6.4. Data Show/Hide ΓòÉΓòÉΓòÉ
  1361.  
  1362. This command toggles between showing and hiding the Data window. The contents 
  1363. of the Data window remain unchanged. 
  1364.  
  1365.  
  1366. ΓòÉΓòÉΓòÉ 6.6.5. Timed Show App ΓòÉΓòÉΓòÉ
  1367.  
  1368. This command shows the application screen for a few seconds. It returns back to 
  1369. the previous view. 
  1370.  
  1371.  
  1372. ΓòÉΓòÉΓòÉ 6.7. Settings Pulldown ΓòÉΓòÉΓòÉ
  1373.  
  1374. The Settings pulldown contains functions dealing with the various settings you 
  1375. can select within SD386. Here are the functions available on the Settings 
  1376. pulldown: 
  1377.  
  1378. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1379. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1380. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1381. Γöé Colors            Γöé Sets colors for various screen items.     Γöé
  1382. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1383. Γöé Exceptions          Γöé Sets various exception notifications.     Γöé
  1384. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1385. Γöé Assembler +/- Source     Γöé Sets type of assembly view.          Γöé
  1386. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1387. Γöé Mnemonics           Γöé Sets the disassembly option.          Γöé
  1388. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1389.  
  1390.  
  1391. ΓòÉΓòÉΓòÉ 6.7.1. Colors ΓòÉΓòÉΓòÉ
  1392.  
  1393. Sets the colors for the various screen areas.  You can choose colors, reset to 
  1394. default colors, and optionally save color settings to the SD386 profile. 
  1395.  
  1396. Use the mouse or keyboard to select the field(s) you wish to change and to 
  1397. cycle through the various choices for foreground and background color.  SD386 
  1398. shows you what the field looks like with each combination. 
  1399.  
  1400.  
  1401. ΓòÉΓòÉΓòÉ 6.7.2. Exceptions ΓòÉΓòÉΓòÉ
  1402.  
  1403. Allows you choose whether to be notified or not for various processor and 
  1404. operating system exceptions. These are exceptions which your target program 
  1405. receives from OS/2. 
  1406.  
  1407. Use the mouse or keyboard to move to any of the given exception definitions. 
  1408. Once you have selected an exception, you can toggle the SD386 notification for 
  1409. that exception to Notify/Nonotify, set all exceptions to their default values, 
  1410. save your selections in the SD386 profile, and/or set your current selections. 
  1411. More information is in Exception Window Details. 
  1412.  
  1413.  
  1414. ΓòÉΓòÉΓòÉ 6.7.3. Assembler +/- Source ΓòÉΓòÉΓòÉ
  1415.  
  1416. Sets the assembler view option.  This option toggles between mixed 
  1417. source/assembly and assembly only views. 
  1418.  
  1419.  
  1420. ΓòÉΓòÉΓòÉ 6.7.4. Mnemonics ΓòÉΓòÉΓòÉ
  1421.  
  1422. This command sets the type of disassembly.  This option toggles between Intel 
  1423. or AL/86 instructions. 
  1424.  
  1425.  
  1426. ΓòÉΓòÉΓòÉ 6.8. Misc Pulldown ΓòÉΓòÉΓòÉ
  1427.  
  1428. The Misc pulldown contains various SD386 functions that don't fit in any of the 
  1429. other menus. Here are the functions available on the Misc pulldown: 
  1430.  
  1431. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1432. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1433. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1434. Γöé CallStack           Γöé List of active procedures.           Γöé
  1435. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1436. Γöé Threads            Γöé List of active threads.            Γöé
  1437. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1438. Γöé Processes           Γöé List of activity.               Γöé
  1439. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1440. Γöé Dlls             Γöé List of DLLs for the application.       Γöé
  1441. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1442. Γöé Registers           Γöé Register display.               Γöé
  1443. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1444. Γöé Edit Registers        Γöé Modify register contents.           Γöé
  1445. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1446. Γöé Co-processor Regs       Γöé Co-processor register display.         Γöé
  1447. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1448.  
  1449.  
  1450. ΓòÉΓòÉΓòÉ 6.8.1. CallStack ΓòÉΓòÉΓòÉ
  1451.  
  1452. This command displays the list of active procedures and allows you to unwind 
  1453. the call stack to a selected procedure. 
  1454.  
  1455.  
  1456. ΓòÉΓòÉΓòÉ 6.8.2. Threads ΓòÉΓòÉΓòÉ
  1457.  
  1458. Displays the status of all active threads and allows you to examine and/or 
  1459. modify their current status. See Thread Window Details for more information. 
  1460.  
  1461.  
  1462. ΓòÉΓòÉΓòÉ 6.8.3. Dlls ΓòÉΓòÉΓòÉ
  1463.  
  1464. Displays the list of Dynamic Link Libraries used by the target application. 
  1465.  
  1466.  
  1467. ΓòÉΓòÉΓòÉ 6.8.4. Registers ΓòÉΓòÉΓòÉ
  1468.  
  1469. Displays the processor registers and their values.  This list is updated at 
  1470. each instruction step. 
  1471.  
  1472.  
  1473. ΓòÉΓòÉΓòÉ 6.8.5. Edit Registers ΓòÉΓòÉΓòÉ
  1474.  
  1475. This command allows you to edit the contents of the registers. 
  1476.  
  1477.  
  1478. ΓòÉΓòÉΓòÉ 6.8.6. Co-processor Regs ΓòÉΓòÉΓòÉ
  1479.  
  1480. Displays the co-processor registers, stack, and their values. This list is 
  1481. updated at each instruction step. See Co-processor Window Details for more 
  1482. information. 
  1483.  
  1484.  
  1485. ΓòÉΓòÉΓòÉ 6.9. Help Pulldown ΓòÉΓòÉΓòÉ
  1486.  
  1487. The Help pulldown contains help for SD386 and its user interface. Here are the 
  1488. functions available on the Help pulldown: 
  1489.  
  1490. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1491. Γöé PULLDOWN           Γöé ACTION                     Γöé
  1492. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1493. Γöé General Help         Γöé Display general information about SD386    Γöé
  1494. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1495. Γöé Keys Help           Γöé Display the various key assignments.      Γöé
  1496. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1497.  
  1498.  
  1499. ΓòÉΓòÉΓòÉ 6.9.1. General Help ΓòÉΓòÉΓòÉ
  1500.  
  1501. SD386 is a source-level debugger for OS/2. It debugs programs compiled with IBM 
  1502. C Set/2, IBM C-Set++, Microsoft C, or PL/X-86. SD386 debugs 32-bit, 16-bit, and 
  1503. mixed 16- and 32-bit applications. SD386 has full keyboard and mouse support. 
  1504. It has a full set of accelerator keys. It has an menu bar with these 
  1505. pull-downs: 
  1506.  
  1507. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1508. Γöé MENU     Γöé DESCRIPTION                          Γöé
  1509. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1510. Γöé File     Γöé File functions, browse, restart, & quit.            Γöé
  1511. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1512. Γöé Run      Γöé Execute the target application in various ways.        Γöé
  1513. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1514. Γöé Breakpoints  Γöé Set/clear various kinds of breakpoints.            Γöé
  1515. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1516. Γöé Search    Γöé Text string search functions.                 Γöé
  1517. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1518. Γöé Data     Γöé Watch, show, expand, and edit data items.           Γöé
  1519. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1520. Γöé View     Γöé SD386 window selection.                    Γöé
  1521. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1522. Γöé Settings   Γöé Colors, exceptions, assembler settings.            Γöé
  1523. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1524. Γöé Misc     Γöé Call stack, thread, DLL, and register info.          Γöé
  1525. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1526. Γöé Help     Γöé Display general and keyboard help information.         Γöé
  1527. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1528.  
  1529. You can use the mouse or keyboard to select a line in the source window.  Click 
  1530. the right mouse button on a line to bring up a menu of functions available for 
  1531. that line.  Generally, you can use the mouse anywhere you can use the keyboard. 
  1532. Use the up and down arrows on the menu bar to change the size of the Data 
  1533. window. 
  1534.  
  1535.  
  1536. ΓòÉΓòÉΓòÉ 6.9.2. Keys Help ΓòÉΓòÉΓòÉ
  1537.  
  1538. Displays a list of your current accelerator key settings. 
  1539.  
  1540.  
  1541. ΓòÉΓòÉΓòÉ 7. SD386 Window Details ΓòÉΓòÉΓòÉ
  1542.  
  1543. In the following sections, each of the windows is discussed in detail. 
  1544.  
  1545.  
  1546. ΓòÉΓòÉΓòÉ 7.1. Data Window Details ΓòÉΓòÉΓòÉ
  1547.  
  1548. You have already seen an example of the Data window that appears at the top of 
  1549. the debugger's screen. When you enter this area with the Data pulldown in the 
  1550. View menu, you can edit the formulas and the displayed storage. Use the Data 
  1551. function (default key F2) again to leave this area. 
  1552.  
  1553. SD386 uses two different colors for the Source and Data windows. When the Data 
  1554. window is active, i.e., the cursor is in the Data window, an extra colored line 
  1555. separates the two windows. This information line also tells you which line in 
  1556. the Data window the cursor is on. 
  1557.  
  1558. If the Data window is size zero (its initial size), then the Data function 
  1559. toggles between a Data window of maximum and minimum size. You may view both 
  1560. data and code at the same time by using the arrows on the Menu Bar to expand or 
  1561. shrink the Data window. 
  1562.  
  1563. To make changes to the Data window, place the cursor in the Data window. Then 
  1564. use the cursor and tab keys to move the cursor to the area you wish to change. 
  1565.  
  1566.  
  1567. ΓòÉΓòÉΓòÉ 7.1.1. Formulas and Expressions ΓòÉΓòÉΓòÉ
  1568.  
  1569. Formulas and expressions can involve variable names as long as these variables 
  1570. are known to SD386. Which variables are known depends on the compiler used. 
  1571.  
  1572. If you use the IBM C Set/2 compiler with the /Ti option or the Microsoft C 
  1573. compiler with the /Zi option, then all functions, variables, and parameters are 
  1574. known to the debugger. The type of each variable is known whether it is a 
  1575. simple type, struct, union, enum, or user-defined typedef. 
  1576.  
  1577. If the PL/X-86 compiler and AL/86 assembler are used with the LOGIC option, 
  1578. then many variables are known to SD386. See Notes for PL/X-86 Programs for a 
  1579. list of types of variables which are unknown. 
  1580.  
  1581. Note:  You can select variables to be viewed or watched with the Show Var, Show 
  1582. Var->, Watch Var, and Watch Var-> functions in the Source window. See Data 
  1583. Pulldown for more details about these functions. These functions work on 
  1584. non-executable as well as executable lines. So, you can place your cursor on a 
  1585. variable name on its declaration line in your source code and view it with one 
  1586. of the functions mentioned. 
  1587.  
  1588.  
  1589. ΓòÉΓòÉΓòÉ 7.1.1.1. Formula Syntax ΓòÉΓòÉΓòÉ
  1590.  
  1591. Formulas in the Data window and expressions in other debugger contexts are 
  1592. composed of: 
  1593.  
  1594. o variable names known to SD386 
  1595. o the Intel register names ax, bx, cx, dx, si, di, bp, sp, ds, es, ss, cs, ip 
  1596. o the Intel register names eax, ebx, ecx, edx, esi, edi, ebp, esp, eip 
  1597. o numeric constants, decimal or hexadecimal (see below) 
  1598. o the plus (+) and minus (-) operators 
  1599. o the multiply (*) operator 
  1600. o the unary pointer dereference (*) operator (only at the start of the formula) 
  1601. o the address of (&) operator (only at the start of the formula) 
  1602. o the pointer operator (->) 
  1603. o the member operator (.) to display members of structs or unions 
  1604. o the subscript operator ([]). Subscripts must be constants or simple 
  1605.   variables; they may not be expressions or complex variables. 
  1606.  
  1607. Note:  For help with formulas, SD386 has a context-sensitive help feature. 
  1608. While you are typing the formula, you can press F1 and SD386 displays detailed 
  1609. information about what you're allowed to put in the formula. 
  1610.  
  1611. Note:  Support for PL/X-86 expressions is limited. PL/X-86 users should use 
  1612. this C-like formula syntax for simple PL/X-86 variables and constants. 
  1613.  
  1614. When SD386 evaluates a formula, variable and parameter names evaluate to their 
  1615. addresses, register names evaluate to the contents of the named register, and 
  1616. constants evaluate to integers. A formula yields an address only if a segment 
  1617. is given (e.g., ss:esp) or implied through use of a variable or parameter name. 
  1618. Formulas with no segment (e.g., ax+1) yield scalar values. 
  1619.  
  1620. Parentheses are not allowed and all operators have equal precedence. 
  1621. Expressions are evaluated from left to right except that a pointer dereference 
  1622. operator is done last (i.e., it applies to the address specified by the rest of 
  1623. the formula). 
  1624.  
  1625. Beware that this differs from the way that the C language interprets 
  1626. expressions. For example, if array is an array of characters, array+2 refers to 
  1627. the 2nd byte beyond array (as in C), and i+2 refers to the 2nd byte beyond i 
  1628. (whereas the C interpretation of i+2 is the value of i plus 2). 
  1629.  
  1630. Notice that although the area of the display devoted to the formula provides 
  1631. only a ten-character field, you may type expressions up to 46 characters long. 
  1632. When you type Enter, the display field will be truncated to ten characters, but 
  1633. the displayed value will still be correct. To see the full underlying formula, 
  1634. move the cursor to that line and type a left or right cursor key. 
  1635.  
  1636. SD386 accepts simple variable names, i.e., variables which are chars, ints, 
  1637. etc., as array indices. For example, SD386 can evaluate array[myint] just like 
  1638. it evaluates array[3]. 
  1639.  
  1640.  
  1641. ΓòÉΓòÉΓòÉ 7.1.1.2. Numeric Constants in Debugger Expressions ΓòÉΓòÉΓòÉ
  1642.  
  1643. Numbers may be treated as either decimal or hexadecimal in expressions parsed 
  1644. by SD386. The rules are as follows: 
  1645.  
  1646.  1. A "0x" forces the number to be treated as hexadecimal. For example, the 
  1647.     number "0x10" is hexadecimal 10 (decimal 16). 
  1648.  2. Any number appearing in an expression which contains a colon (":") is 
  1649.     treated as hexadecimal. For example, in the following expression 
  1650.  
  1651.         47:5c+4
  1652.     both the 5c and the 4 are treated as hex. 
  1653.  3. Any other number is treated as a decimal number. For example, the 
  1654.     expression "alphabet[25]" treats the 25 as a decimal subscript. 
  1655.  
  1656.  
  1657. ΓòÉΓòÉΓòÉ 7.1.2. How Variables are Displayed ΓòÉΓòÉΓòÉ
  1658.  
  1659. SD386 displays various variable types in default formats. You can change the 
  1660. display format for each variable. See Data Display Format Options for 
  1661. information. The default formats are: 
  1662.  
  1663. Variable Type     Display Format 
  1664. Char              Hex value followed by ASCII character in quotes 
  1665. Int               Two-byte decimal and corresponding hex value 
  1666. Long              Four-byte decimal and corresponding hex value 
  1667. Float             Four-byte floating-point 
  1668. Double            Eight-byte floating-point 
  1669. Ptr               Selector:Offset => contents 
  1670. Char array        Hex value (16 bytes per line) followed by corresponding ASCII 
  1671.                   chars 
  1672. Int array         [Element number] followed by decimal contents - one element 
  1673.                   per line 
  1674. Struct, union     membername: contents as above - one member per line 
  1675.  
  1676.  
  1677. ΓòÉΓòÉΓòÉ 7.1.3. Hiding the Data Window ΓòÉΓòÉΓòÉ
  1678.  
  1679. The Data window and its contents can be hidden and re-shown with the Data 
  1680. Show/Hide pulldown on the View menu. 
  1681.  
  1682.  
  1683. ΓòÉΓòÉΓòÉ 7.1.4. Data Display Format Options ΓòÉΓòÉΓòÉ
  1684.  
  1685. You can choose to display a data item in one of several formats with the Format 
  1686. Var function. To bring up the Format Var menu of format choices, put the cursor 
  1687. in the Data window under the name of the data item you wish to format and press 
  1688. C_Enter or use the mouse to select Format Var in the Data pulldown. 
  1689.  
  1690. The options for formatting the display of a variable are: 
  1691.  
  1692. Hex         Displays storage as a sequence of hexadecimal bytes. 
  1693.  
  1694. Char        Displays a variable as a single ASCII character. 
  1695.  
  1696. Int         Displays a variable as a decimal (2-byte) integer. 
  1697.  
  1698. Long        Displays a variable as a decimal (4-byte) integer. 
  1699.  
  1700. Float       Displays a variable as a floating point (4-byte) number. 
  1701.  
  1702. Double      Displays a variable as a double-precision (8-byte) floating point 
  1703.             number. 
  1704.  
  1705. (.native)   This option's actual wording depends on the type of the formula the 
  1706.             cursor is on and shows the current type of the expression. If you 
  1707.             select this option, the variable will be reformatted according to 
  1708.             the indicated type. 
  1709.  
  1710. ?           Any type. Selecting this option will result in a prompt requesting 
  1711.             a type name. The variable will be formatted as indicated by the 
  1712.             type, which may be one of the following types: 
  1713.  
  1714.    o char 
  1715.    o int 
  1716.    o long 
  1717.    o uchar 
  1718.    o uint 
  1719.    o ulong 
  1720.    o float 
  1721.    o double 
  1722.    o @var 
  1723.  
  1724.             The @var type tells SD386 to format the variable with the type of 
  1725.             the variable "var" For example, use @mystruct to format a variable 
  1726.             with the mystruct type. 
  1727.  
  1728.             If you use the IBM C Set/2 compiler with the /Ti option, the 
  1729.             Microsoft C compiler /Zi option, or the PL/X-86 compiler LOGIC 
  1730.             option, you may also specify any program defined type. An asterisk 
  1731.             (*) may also be added after any one of the above types to indicate 
  1732.             a pointer to the type. 
  1733.  
  1734.             Use this user-defined typecast to format any block of storage as 
  1735.             any available variable type. 
  1736.  
  1737. SD386 does not handle PL/X-86 expressions. PL/X-86 users should specify the C 
  1738. types for their PL/X-86 variables. PL/X-86 variables map to the allowed types 
  1739. as follows: 
  1740.  
  1741. PL/X-86 Type                  C Type 
  1742.  
  1743. char or char(1)               char 
  1744. fixed or binary               int 
  1745. fixed(8) or binary(8)         unsigned char 
  1746. fixed(15) or binary(15)       int 
  1747. fixed(31) or binary(31)       long 
  1748. fixed(16) or binary(16)       unsigned int 
  1749. fixed(32) or binary(32)       unsigned long 
  1750. ptr                           int * 
  1751.  
  1752.  
  1753. ΓòÉΓòÉΓòÉ 7.1.5. Bitfield Handling ΓòÉΓòÉΓòÉ
  1754.  
  1755. Implementation of bitfields is compiler dependent and as such all compilers 
  1756. choose a different way to do it. SD386 does two things in the display of bit 
  1757. fields. First, it shows the bit pattern. Second, if possible, it shows the 
  1758. pattern within the containing byte, word, or dword of storage. SD386 can do 
  1759. this for all compilers it supports except IBM C Set/2. In this case, since bit 
  1760. assignment is byte based and assignments are made from low order to high order 
  1761. bits, the bit field may span two or more bytes. When this happens SD386 only 
  1762. shows the bit pattern and abandons trying to show the bit pattern within the 
  1763. containing storage. 
  1764.  
  1765. Example of bit fields for some compilers 
  1766.  
  1767. Following is a simple example of some bit field definitions and some assigned 
  1768. values. The bit pattern in storage is shown below for some compilers. 
  1769.  
  1770.       struct {
  1771.          unsigned int a : 1;
  1772.          unsigned int b : 4;
  1773.          unsigned int c : 6;
  1774.          unsigned int d : 8;
  1775.  
  1776.       } flags;
  1777.  
  1778.        void
  1779.       main()
  1780.       {
  1781.        flags.a = 1;
  1782.        flags.b = 12;
  1783.        flags.c = 57;
  1784.        flags.d = 195;
  1785.       }
  1786.  
  1787. IBM C/2 1.1 & Microsoft C 6.00 
  1788.  
  1789. Bits are assigned from 0 to 15. The maximum size of a bit field is sixteen 
  1790. bits. Several bitfields may be contained within a word of storage but a bit 
  1791. field will never span words. 
  1792.  
  1793.    111111               111111
  1794.    5432109876543210     5432109876543210
  1795.    ................     ................
  1796.                   1 a
  1797.               1100  b
  1798.         111001      c
  1799.                                 11000011 d
  1800.  
  1801. CL386 
  1802.  
  1803. Bits are assigned from 0 to 31. The maximum size of a bit field is 32 bits. 
  1804. Several bit fields may be contained within a dword of storage, but a bit field 
  1805. will never span dwords. 
  1806.  
  1807.    3222222222221111111111
  1808.    10987654321098765432109876543210
  1809.    ................................
  1810.                                   1 a
  1811.                               1100  b
  1812.                         111001      c
  1813.                 11000011            d
  1814.    .............
  1815.  
  1816. IBM C Set/2 
  1817.  
  1818. Bit assignment is byte based in a bit string format. Bits within bytes are 
  1819. assigned from 0 to 7. Several bit fields may be contained within a byte of 
  1820. storage and a bit field may span bytes or several bytes. When a bit field spans 
  1821. bytes, SD386 chooses to show the bit pattern and does not try to show the 
  1822. pattern within the containing storage. 
  1823.  
  1824.    76543210 76543210  76543210 76543210
  1825.    ........ ........  ........ ........
  1826.           1                             a
  1827.       1100                              b
  1828.    001           111                    c <- spans 2 bytes
  1829.                                            SD386 shows as 111001.
  1830.             00011          110          d <- spans 2 bytes
  1831.                                            SD386 shows as 11000011.
  1832.  
  1833. PL/X-86 
  1834.  
  1835. Bit assignment is byte based in a bit string format. Bits within bytes are 
  1836. assigned from 7 to 0. Several bit fields may be contained within a byte of 
  1837. storage and a bit field may span bytes or several bytes. 
  1838.  
  1839.    76543210 76543210  76543210 76543210
  1840.    ........ ........  ........ ........
  1841.    1                                    a
  1842.     0011                                b
  1843.         100 111                         c
  1844.                11000  011               d
  1845.  
  1846.  
  1847. ΓòÉΓòÉΓòÉ 7.2. Data Expansion Window Details ΓòÉΓòÉΓòÉ
  1848.  
  1849. The Data Expansion window provides an expanded view of a variable such as a 
  1850. member of a structure or union. To expand a variable into the window, place the 
  1851. cursor on a line containing the variable in either the Source or Data window 
  1852. and choose the Expand Var pulldown on the Data menu. 
  1853.  
  1854. If the member is a structure or union, its components will be displayed in the 
  1855. Data Expansion window. If the member is a pointer to another structure, etc., 
  1856. the contents of the variable pointed to by the pointer will be displayed in the 
  1857. Data Expansion window. 
  1858.  
  1859. The window also allows you to easily traverse linked lists. For example, if you 
  1860. use structures with next pointers to create linked lists, you can traverse the 
  1861. linked list by using the Data Expansion window keys to move up and down in the 
  1862. list. In fact, it's easiest if you create your structures with the first member 
  1863. as the next pointer. For example: 
  1864.  
  1865. typedef struct node
  1866. {
  1867.   struct node *next;
  1868.   char name[20];
  1869.   char ssnum[11];
  1870. } NODE;
  1871.  
  1872. To traverse a linked list, put the first element into the Data window. Then, 
  1873. place the cursor on the line for the next pointer and press the key for the 
  1874. Expand Var function. The next list element will be displayed in the Data 
  1875. Expansion window. To continue to traverse down the linked list, repeatedly 
  1876. press the Right Arrow or Enter key. With each key, SD386 will display the next 
  1877. element in the list (pointed to by next). To traverse back up the linked list, 
  1878. repeatedly press the Left Arrow key. With each key, SD386 will display the 
  1879. previous element. To leave the Data Expansion window, press the Esc key. 
  1880.  
  1881.  
  1882. ΓòÉΓòÉΓòÉ 7.3. Co-processor Window Details ΓòÉΓòÉΓòÉ
  1883.  
  1884. The example below is from a typical co-processor register display. The layout 
  1885. and function of the registers is consistent with the documentation in the Intel 
  1886. 30387 Programmer's Reference Manual. 
  1887.  
  1888. 0     .... ................
  1889.  
  1890. 1     .... ................
  1891.  
  1892. 2     .... ................
  1893.  
  1894. 3     .... ................
  1895.  
  1896. 4     .... ................
  1897.  
  1898. 5     .... ................
  1899.  
  1900. 6 ST0 0000 0000000000000000
  1901.   +0.0000000000000000000000
  1902. 7 ST1 3FFF C000000000000000
  1903.   +1.5000000000000000000000
  1904.  
  1905.             C   CCCESPUOZDI
  1906.            B3TOP210SFEEEEEE
  1907. Status:    1011000010000100
  1908.                RCPC  PUOZDI
  1909. Control:   0000001101100010
  1910.  
  1911. The physical registers, numbered 0-7, are fixed. The logical registers, 
  1912. ST0-ST7, are a function of the current state of the stack and will move up and 
  1913. down in a stack fashion as a function of stack usage. In this example, there 
  1914. are two numeric values on the stack in logical registers ST0 and ST1. ST0 is 
  1915. contained in physical register 6 and ST1 is contained in physical register 7. 
  1916. ST0 is always the top of the stack. 
  1917.  
  1918. Each stack value is shown in hex and decimal format. There are four bytes of 
  1919. sign + exponent and 16 bytes (64 bits) of significand. The decimal values are 
  1920. shown with 19 bits of precision. See the Intel documentation for a discussion 
  1921. of numeric precision. This is a subject well beyond the scope of this 
  1922. documentation. 
  1923.  
  1924. The Status and Control registers are also labeled according to the Intel 
  1925. documentation. Notice that the Status register contains one bit fields with two 
  1926. character vertical labels except the "TOP" field. This field is a three bit 
  1927. field and is labeled horizontally. 
  1928.  
  1929. Note:  Co-processor exceptions are reported on the first instruction after the 
  1930. offending instruction. This is how the hardware works. Most of the time, this 
  1931. will be the previous instruction, however, this is not guaranteed. 
  1932.  
  1933. When the exception is reported, the co-processor registers have already been 
  1934. reset to the init state, so you have an exception but the register information 
  1935. is useless. You will have to set a breakpoint on the previous instruction and 
  1936. restart to see the "real" state of the registers when the exception occurred. 
  1937.  
  1938. Essentially, the debugger can't get the registers at the time of the exception 
  1939. without restarting. We discussed this with the OS/2 developers but were told 
  1940. this would be a permanent restriction. One thing you can do is observe the 
  1941. Status register exception flags which will show the exception flag raised when 
  1942. the offending instruction executes. At this point, the registers should reflect 
  1943. the values causing the exception. 
  1944.  
  1945. For a complete discussion of co-processor function, see the following Intel 
  1946. reference books: 
  1947.  
  1948. o 80387 Programmer's Reference Manual 
  1949. o i486 Microprocesser Programmer's Reference Manual. 
  1950.  
  1951.  
  1952. ΓòÉΓòÉΓòÉ 7.4. Watchpoint Window Details ΓòÉΓòÉΓòÉ
  1953.  
  1954. You can access the 80386/80486 hardware debug registers by using SD386 
  1955. watchpoints. This is a debugging advantage provided with OS/2 2.x since 
  1956. previous releases of the operating system did not provide the API needed to 
  1957. access these registers. The debug registers can be used to set both instruction 
  1958. and data breakpoints. The most significant improvement comes with the ability 
  1959. to set data breakpoints. 
  1960.  
  1961. Debuggers typically implement data breakpoints by single stepping program 
  1962. instructions and examining the address locations to determine if a value has 
  1963. changed. This method is essentially useless for applications of any complexity. 
  1964. By using the debug registers, data breakpoints can be implemented without 
  1965. incurring the overhead of single stepping and can now become an integral part 
  1966. of the debugging process. 
  1967.  
  1968. SD386 implements access to the debug registers by providing a Watchpoint window 
  1969. via the Hardware Debug Registers pulldown. You are allowed to set a maximum of 
  1970. four watchpoints. This is a hardware restriction. The window lets you specify 
  1971. your watchpoints by entering information into a number of fields. All fields 
  1972. except the expression field have pre-defined values that you select by simply 
  1973. pressing the spacebar. In the expression field, you will enter any expression 
  1974. that evaluates to a size of 1,2, or 4 bytes. A complete description of the 
  1975. field entries for the Watchpoint window follows. You can also use Help while 
  1976. viewing the Watchpoint window to get online help. 
  1977.  
  1978. See the Intel 80386/80486 Programmer's reference manual for more information on 
  1979. the hardware debug registers. 
  1980.  
  1981. Watchpoint Window Functions 
  1982.  
  1983. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1984. Γöé MOUSE INPUT    Γöé KEY INPUT     Γöé IF YOU WANT TO             Γöé
  1985. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1986. Γöé          Γöé UP/DOWN ARROW   Γöé Select a watchpoint           Γöé
  1987. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1988. Γöé          Γöé LEFT/RIGHT ARROW Γöé Tab to next field            Γöé
  1989. Γöé          Γöé OR TABS      Γöé                     Γöé
  1990. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1991. Γöé <SIZE>      Γöé          Γöé Set size of expression (1, 2, or 4   Γöé
  1992. Γöé          Γöé          Γöé bytes)                 Γöé
  1993. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1994. Γöé <SCOPE>      Γöé          Γöé Set scope of expression (local or    Γöé
  1995. Γöé          Γöé          Γöé global)                 Γöé
  1996. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1997. Γöé <TYPE>      Γöé          Γöé Set access type (Write, Read/Write, or Γöé
  1998. Γöé          Γöé          Γöé Execute)                Γöé
  1999. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2000. Γöé <STATUS>     Γöé          Γöé Set status (enabled or disabled)    Γöé
  2001. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2002. Γöé <HELP>      Γöé F1        Γöé See the Help panel           Γöé
  2003. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2004. Γöé <ENTER>      Γöé ENTER       Γöé Put in the watchpoints         Γöé
  2005. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2006. Γöé <CANCEL>     Γöé ESC        Γöé Exit without any action         Γöé
  2007. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2008. Γöé NOTE:  The Expression must evaluate to a size of 1,2 or 4 bytes.       Γöé
  2009. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2010. Γöé NOTE:  An '*' before the address field indicates SD386 aligned address.    Γöé
  2011. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2012.  
  2013. Note:  Size lengths of 2 and 4 bytes must be word and dword aligned 
  2014. respectively. SD386 enforces the necessary alignment and annotates the address 
  2015. with an "*" if alignment is necessary. 
  2016.  
  2017. Note:  You cannot modify the Addr field.  If you want this field to contain a 
  2018. specific address, enter it into the expression field. 
  2019.  
  2020. Note:  Local watchpoints are specific to a single process - the application 
  2021. you're debugging. Global watchpoints are effective in the context of any 
  2022. process. If you use a global watchpoint, you may get many more hits than you 
  2023. expect because many processes may include the address you specify. Currently, 
  2024. SD386 filters its own process id so hits inside SD386 will not be displayed. 
  2025.  
  2026. Note:  Watchpoint types can be Write, ReadWrite, or Execute. Write means the 
  2027. watchpoint will be hit only when the specified address is written to. ReadWrite 
  2028. means the watchpoint will be hit when the specified address is accessed (read 
  2029. from or written to). Execute means the watchpoint will be hit when the 
  2030. specified address is executed. 
  2031.  
  2032.  
  2033. ΓòÉΓòÉΓòÉ 7.5. Thread Window Details ΓòÉΓòÉΓòÉ
  2034.  
  2035. The SD386 thread selection window allows you to choose which threads are 
  2036. allowed to run and which are frozen. The thread status consists of two parts: 
  2037. the frozen (non-runnable) / thawed (runnable) state, and the actual state based 
  2038. on resources the thread may be waiting on. This actual state is runnable (the 
  2039. thread is not blocked on a resource) or blocked. You can choose to freeze or 
  2040. thaw individual threads, freeze or thaw all threads, and display the source 
  2041. filename and function name associated with each thread. 
  2042.  
  2043. If you freeze all of your application's threads and then attempt to run your 
  2044. application, it will lock up. 
  2045.  
  2046. Selecting a thread as the one to execute does not ensure that it will be the 
  2047. one that OS/2 allows to run unless you single step. OS/2 will look that the 
  2048. priority of all thawed threads and will allow the one with the highest priority 
  2049. to run if you run the application (i.e., you use the Run function). If you use 
  2050. the Single Step function, however, OS/2 ensures that only the selected thread 
  2051. is stepped. The other threads do not get time slices in this case. 
  2052.  
  2053. Thread Window Functions 
  2054.  
  2055. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2056. Γöé MOUSE INPUT    Γöé KEY INPUT     Γöé IF YOU WANT TO             Γöé
  2057. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2058. Γöé          Γöé UP/DOWN ARROW   Γöé Highlight a thread           Γöé
  2059. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2060. Γöé <SELECT>     Γöé SPACE       Γöé Select highlighted thread        Γöé
  2061. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2062. Γöé <NAMES>      Γöé A         Γöé Toggle state, filename, line number,  Γöé
  2063. Γöé          Γöé          Γöé and function info            Γöé
  2064. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2065. Γöé <FREEZE>     Γöé F         Γöé Freeze highlighted thread        Γöé
  2066. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2067. Γöé <THAW>      Γöé T         Γöé Thaw highlighted thread         Γöé
  2068. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2069. Γöé <FREEZE ALL>   Γöé R         Γöé Freeze all threads           Γöé
  2070. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2071. Γöé <THAW ALL>    Γöé H         Γöé Thaw all threads            Γöé
  2072. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2073. Γöé <ENTER>      Γöé ENTER       Γöé Accept current thread status      Γöé
  2074. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2075. Γöé <CANCEL>     Γöé ESC        Γöé Exit without any action         Γöé
  2076. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2077. Γöé <HELP>      Γöé F1        Γöé See the Help panel           Γöé
  2078. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2079. Γöé NOTE:  The Expression must evaluate to a size of 1,2 or 4 bytes.       Γöé
  2080. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2081. Γöé NOTE:  An '*' before the address field indicates SD386 aligned address.    Γöé
  2082. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2083.  
  2084.  
  2085. ΓòÉΓòÉΓòÉ 7.6. Exception Window Details ΓòÉΓòÉΓòÉ
  2086.  
  2087. Exception Window Functions 
  2088.  
  2089. The SD386 exception notification window allows you to choose the processor 
  2090. exceptions for which you will be notified. You can choose to be notified or not 
  2091. for each of the defined exceptions. You can also reset the exception 
  2092. notifications to defaults and save your selections to the SD386 profile. 
  2093.  
  2094. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2095. Γöé MOUSE INPUT    Γöé KEY INPUT     Γöé IF YOU WANT TO             Γöé
  2096. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2097. Γöé LEFT CLICK    Γöé UP/DOWN ARROW   Γöé Select an exception           Γöé
  2098. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2099. Γöé MOVE & LEFT    Γöé LEFT/RIGHT    Γöé Move to next field           Γöé
  2100. Γöé CLICK       Γöé ARROWS OR TAB   Γöé                     Γöé
  2101. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2102. Γöé <NEXT> OR LEFT  Γöé SPACE       Γöé Switch to next notification option   Γöé
  2103. Γöé CLICK       Γöé          Γöé                     Γöé
  2104. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2105. Γöé <DEFAULT>     Γöé D         Γöé Set all exception notifications to   Γöé
  2106. Γöé          Γöé          Γöé defaults                Γöé
  2107. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2108. Γöé <RESET>      Γöé R         Γöé Reset single exception notification to Γöé
  2109. Γöé          Γöé          Γöé default                 Γöé
  2110. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2111. Γöé <THAW>      Γöé T         Γöé Thaw highlighted thread         Γöé
  2112. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2113. Γöé <SAVE>      Γöé S         Γöé Save exception notifications to     Γöé
  2114. Γöé          Γöé          Γöé profile                 Γöé
  2115. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2116. Γöé <ENTER>      Γöé ENTER       Γöé Accept current exception notifications Γöé
  2117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2118. Γöé <CANCEL>     Γöé ESC        Γöé Exit without any action         Γöé
  2119. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2120. Γöé <HELP>      Γöé F1        Γöé See the Help panel           Γöé
  2121. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2122.  
  2123.  
  2124. ΓòÉΓòÉΓòÉ 8. Remote Debugging ΓòÉΓòÉΓòÉ
  2125.  
  2126. This section discusses various ways to debug remotely. 
  2127.  
  2128.  
  2129. ΓòÉΓòÉΓòÉ 8.1. Overview ΓòÉΓòÉΓòÉ
  2130.  
  2131. SD386 gives you the ability to debug your applications remotely over an async 
  2132. or netbios connection. Some reasons why you might want to do this are: 
  2133.  
  2134. o If you have an application that is hanging your machine, you can use a remote 
  2135.   connection to run your application under the debugger, reproduce the hang, 
  2136.   and then from the debugger, you can enter a Ctrl-Break. You will return to 
  2137.   the debugger with an "Asynchronous Stop" notification and then you can 
  2138.   examine threads to determine why the application is hung. 
  2139.  
  2140. o If you are debugging a PM application, sometimes PM resource interlocks can 
  2141.   lead to machine hangs. By moving the debugger to another machine thereby 
  2142.   giving the debugger its own set of resources, you can avoid these types of 
  2143.   hangs. 
  2144.  
  2145. o If you're debugging a PM application, sometimes the debugger windows and the 
  2146.   screen swapping are annoying. You can alleviate this annoyance with a remote 
  2147.   connection. 
  2148.  
  2149. o If you have a problematic application at a customer's location and 
  2150.   reproducing a test case is not feasible, then you can dial up the application 
  2151.   and debug the problem as it exists in the customer's environment from your 
  2152.   office workstation. 
  2153.  
  2154. o If you have an application that must be started with DosExecPgm(), yet it 
  2155.   can't share its screen group with the debugger, then you have to move the 
  2156.   debugger to another machine. The Session Manager (AKA the first instance of 
  2157.   the PM Shell) and OS/2 install programs are examples of these types of 
  2158.   applications. 
  2159.  
  2160. The remote debugging configuration can best be described with reference to the 
  2161. following diagram. 
  2162.  
  2163.    SD386 Machine                                        Probe(ESP) Machine
  2164.     -----------------                                    ------------------
  2165.    |                 |    Remote Connection             |                  |
  2166.    | SD386           |<---------------//--------------->| ESP              |
  2167.    |                 |                                  |                  |
  2168.    | +               |                                  | +                |
  2169.    |                 |                                  |                  |
  2170.    | Your application|<================================>| Your application |
  2171.    | EXEs and DLLs   |                                  | EXEs and DLLs.   |
  2172.    | compiled and    | (These EXEs and DLLs must match) |                  |
  2173.    | linked with     |                                  |                  |
  2174.    | debug switches. |                                  |                  |
  2175.    | You only need   |                                  |                  |
  2176.    | the ones you    |                                  |                  |
  2177.    | want to debug.  |                                  |                  |
  2178.    |                 |                                  |                  |
  2179.    | +               |                                  |                  |
  2180.    |                 |                                  |                  |
  2181.    | Source          |                                  |                  |
  2182.     -----------------                                    ------------------
  2183.  
  2184. The SD386 Machine consists of SD386 plus debug images of the application's EXEs 
  2185. and DLLs that you want to debug. If you want to see source then you will also 
  2186. need the source code. "Debug image" means that the debugger has access to the 
  2187. EXEs and DLLs compiled and linked with the compiler and linker debug switches. 
  2188. Any EXEs or DLLs for which there are no images will be debugged at assembler 
  2189. level. 
  2190.  
  2191. The Probe Machine consists of the Execution Services Probe(ESP) plus your 
  2192. application's EXEs and DLLs. These executables are the ones shipped with your 
  2193. application, and thus, do not need debug information attached. BUT, the ones 
  2194. you want to debug must have a matching debug image on the SD386 Machine. 
  2195.  
  2196. The Remote Connection consists of an async connection via null modem or phone 
  2197. line, or a netbios connection. 
  2198.  
  2199.  
  2200. ΓòÉΓòÉΓòÉ 8.2. Starting ESP ΓòÉΓòÉΓòÉ
  2201.  
  2202. To start ESP from the OS/2 command prompt, enter the ESP command and any ESP 
  2203. options. 
  2204. The full description of the command syntax is: 
  2205.  
  2206.    ESP ╤ìoptionsΓêÖ
  2207.  
  2208.   where the options are:
  2209.  
  2210. /rn           Remote debug over an async connection at the line speed specified 
  2211.               by n. The following n values are supported: 
  2212.  
  2213.    o 0 - 300 
  2214.    o 1 - 1200 
  2215.    o 2 - 2400 
  2216.    o 3 - 4800 
  2217.    o 4 - 9600 
  2218.    o 5 - 19200 
  2219.    o 6 - 38400 
  2220.  
  2221. /an           For an async connection, use the com port specified by n. The 
  2222.               default if this option is not specified is com port 1(COM1). You 
  2223.               can use values of 1, 2, 3, or 4. 
  2224.  
  2225. /o[Filespec]  Make a modem-modem phone line connection. If the optional 
  2226.               Filespec is not used, then ESP will send the AT commands 
  2227.               necessary to put the modem in Auto-Answer mode. Filespec is a 
  2228.               file of AT commands that you can send to your modem if you don't 
  2229.               want to take the default. 
  2230.  
  2231. /nAname       Make a netbios connection to an adapter by the name Aname. Use 
  2232.               the same name on both the SD386 and the ESP machine. Aname needs 
  2233.               to 13 characters or less. 
  2234.  
  2235.  
  2236. ΓòÉΓòÉΓòÉ 8.3. Netbios Connection ΓòÉΓòÉΓòÉ
  2237.  
  2238. The only thing you need to know about netbios connections is to use the same 
  2239. logical name on both the ESP and the SD386 machines. You can have multiple 
  2240. netbios connections to a probe machine hence you can debug two unrelated 
  2241. processes running on the same machine using two separate probes and netbios 
  2242. connections. 
  2243.  
  2244.  
  2245. ΓòÉΓòÉΓòÉ 8.4. Async Connection ΓòÉΓòÉΓòÉ
  2246.  
  2247. The following sections provide information about using an asynchronous 
  2248. communications connection to remote debug an application. SD386 supports both a 
  2249. null modem and a modem to modem phone line connect. 
  2250.  
  2251.  
  2252. ΓòÉΓòÉΓòÉ 8.4.1. Com Port Settings ΓòÉΓòÉΓòÉ
  2253.  
  2254. SD386 and ESP set up the com port for you. You do not have to issue any MODE 
  2255. commands. The only option is the bit rate and you set this using the /r╤ìnΓêÖ 
  2256. invocation option. All transmissions are binary so the standard "N,8,1" 
  2257. settings are fixed by SD386 and ESP. 
  2258.  
  2259.  
  2260. ΓòÉΓòÉΓòÉ 8.4.2. Null Modem Connection ΓòÉΓòÉΓòÉ
  2261.  
  2262. Remote debugging over an async connection is accomplished by connecting the com 
  2263. ports of two machines using a null modem cable. You will need a null modem 
  2264. cable, or a standard serial cable plus a null modem adaptor. Normally, you will 
  2265. need female connectors on both ends of the cable. 
  2266.  
  2267.  
  2268. ΓòÉΓòÉΓòÉ 8.4.3. Modem-Modem Connection ΓòÉΓòÉΓòÉ
  2269.  
  2270. The modem to modem connection support is provided to let you debug your 
  2271. application over a phone line. 
  2272.  
  2273.  
  2274. ΓòÉΓòÉΓòÉ 8.4.3.1. Modem Support ΓòÉΓòÉΓòÉ
  2275.  
  2276. The /o invocation option is provided to help you make the phone line connection 
  2277. with your particular modem. By default, SD386 will originate the call prompting 
  2278. you for the phone number that you want to dial. ESP, by default, will answer 
  2279. the call by placing the modem in Auto-Answer mode. If you don't want to use the 
  2280. defaults, then you can put the AT commands in a file and either SD386 or ESP 
  2281. will send these commands to your modem. Some sample command files are provided 
  2282. in the package and will be discussed in detail later. 
  2283.  
  2284.  
  2285. ΓòÉΓòÉΓòÉ 8.4.3.2. Handshaking ΓòÉΓòÉΓòÉ
  2286.  
  2287. If you're using a modem-modem connection, both modems need to be set up for 
  2288. hardware handshaking. This means that the RTS/CTS lines are used for 
  2289. handshaking on data transmissions, and DTR/DSR are used to signal the readiness 
  2290. of the computer and the modem. Most of the time hardware handshaking is the 
  2291. factory default; however, you might be using a modem that someone has set up 
  2292. for a bulletin board or some other application and it may have settings 
  2293. different from the factory defaults. There should be a simple AT command to set 
  2294. your modem back to factory defaults. For example, the AT command for a 
  2295. Practical Peripheral 9600SA is AT&F. ESP and SD386 set up the hardware 
  2296. handshaking for you on the com port but you will have to set up your modem. 
  2297.  
  2298.  
  2299. ΓòÉΓòÉΓòÉ 8.4.3.3. Command Mode to Online Mode ΓòÉΓòÉΓòÉ
  2300.  
  2301. When you first turn power on to your modem it should come up in command mode. 
  2302. You can test this by bringing up a terminal emulator and typing AT followed by 
  2303. ENTER. You should get back an OK result message. If you don't, then you 
  2304. probably have a handshaking problem. When you use the /o invocation option, 
  2305. SD386 and ESP issue the AT command to test for modem attention. You will see 
  2306. the AT command and the OK result message printed on the screen. After that, 
  2307. SD386 and ESP will send modem commands to either originate or answer the call. 
  2308. After the commands are sent, you will see the result messages coming back from 
  2309. the modem until a "CONNECT" message is received. This is the indication that 
  2310. you're now online and ready to start debugging. 
  2311.  
  2312.  
  2313. ΓòÉΓòÉΓòÉ 8.4.3.4. Originate Mode ΓòÉΓòÉΓòÉ
  2314.  
  2315. After turning on the modem and coming up in command mode you will normally set 
  2316. up the SD386 side of the connection to originate the call. By default, SD386 
  2317. will send the AT commands necessary to originate the call and prompt you for a 
  2318. phone number. 
  2319.  
  2320.  
  2321. ΓòÉΓòÉΓòÉ 8.4.3.5. Answer Mode ΓòÉΓòÉΓòÉ
  2322.  
  2323. After turning on the modem and coming up in command mode you will normally set 
  2324. up the ESP side of the connection to answer the call. By default, ESP will send 
  2325. the AT commands necessary to answer the call and wait for the call from SD386 
  2326. to come in. 
  2327.  
  2328.  
  2329. ΓòÉΓòÉΓòÉ 8.4.3.6. Result Messages ΓòÉΓòÉΓòÉ
  2330.  
  2331. You will see messages printed on your screen as SD386 and ESP send modem 
  2332. commands. The first messages will be an echo of the AT command sent by SD386 or 
  2333. ESP and the next message will be the OK result message. After that, you will 
  2334. see your originate or answer messages. The last message you see should be the 
  2335. "CONNECT" message. 
  2336.  
  2337.  
  2338. ΓòÉΓòÉΓòÉ 8.4.3.7. Sample Modem Command Files ΓòÉΓòÉΓòÉ
  2339.  
  2340. Here are some examples of modem command files: 
  2341.  
  2342.      modemsd.ppi
  2343.            |   |
  2344.            |    ---Practical Peripherals/Practical Modern 9600SA
  2345.            |
  2346.             ---SD386(debugger) side of the connection.
  2347.  
  2348.       AT&F     <--- set factory defaults.
  2349.       AT&C1&D0 <--- hardware handshaking/don't disconnect at DTR drop
  2350.       ATL0     <--- set modem speaker to lowest level.
  2351.       ATS2=255 <--- turn off escape character sequence.
  2352.       ATS7=20  <--- wait 20 seconds for the remote modem to answer.
  2353.       ATDT2152 <--- dial local extension 2152.
  2354.  
  2355.      modemesp.ppi
  2356.            |   |
  2357.            |    ---Practical Peripherals/Practical Modern 9600SA
  2358.            |
  2359.             ---ESP(probe) side of the connection.
  2360.  
  2361.       AT&F     <--- set factory defaults.
  2362.       AT&C1&D2 <--- hardware handshaking/disconnect at DTR drop.
  2363.       ATL0     <--- set modem speaker to lowest level.
  2364.       ATS2=255 <--- turn off escape character sequence.
  2365.       ATS0=1   <--- Auto-Answer after one ring.
  2366.  
  2367.  
  2368. ΓòÉΓòÉΓòÉ 9. Hints and Tips ΓòÉΓòÉΓòÉ
  2369.  
  2370. This chapter contains various hints, tips, and information. We suggest that you 
  2371. scan through the headings and read those sections that seem relevant to you. 
  2372. Available topics are: 
  2373.  
  2374. Mixed Application and Device Driver Debugging: 
  2375.  
  2376. o Using SD386 with ASDT32 
  2377.  
  2378.   DLL info: 
  2379. o Debugging DLLs 
  2380.  
  2381.   Assumptions and Limitations: 
  2382. o Assumptions 
  2383. o General Limitations 
  2384. o Presentation Manager Limitations 
  2385.  
  2386.   Compiler Notes: 
  2387. o Notes for PL/X-86 Programs 
  2388. o Notes for C Programs 
  2389.  
  2390.   Debugging speed: 
  2391. o Single Step Slowness 
  2392.  
  2393.  
  2394. ΓòÉΓòÉΓòÉ 9.1. Using SD386 with ASDT32 ΓòÉΓòÉΓòÉ
  2395.  
  2396. If you plan on using SD386 and ASDT32 concurrently, you must follow these 
  2397. instructions. Basically, when you load ASDT32 at start-up time, you must tell 
  2398. it to keep away from the normal debug interrupts or SD386 will not be able to 
  2399. execute your target program. To do this, issue these commands in your 
  2400. CONFIG.SYS file: 
  2401.  
  2402. DEVICE=ASDT32.EXE /K=4A /1 /3 /D
  2403. DEVICE=ASDT322.EXE
  2404.  
  2405. Once you've entered ASDT32, you must use the ASDT32 TI command to take 
  2406. interrupts 1, 3, and D. Before leaving ASDT32, you must free these interrupts 
  2407. again with the ASDT32 RI command. 
  2408.  
  2409. Note:  The =4A part of the option allows you to choose the keycode you wish to 
  2410. be the ASDT32 hotkey. The /K=4A option is not necessary to run these two tools 
  2411. concurrently. It does allow you to hot key into ASDT32 at any time. 
  2412.  
  2413. For more information about this debugging scenario, see the SD86 FORUM, the 
  2414. CODEVIEW FORUM, and the ASDT FORUM on IBMPC. There is also additional 
  2415. information in the ASDT User's Guide and Reference, which is available in the 
  2416. ASDTPACKAGE on OS2TOOLS. 
  2417.  
  2418.  
  2419. ΓòÉΓòÉΓòÉ 9.2. Debugging DLLs ΓòÉΓòÉΓòÉ
  2420.  
  2421. There are several things you must be careful about when debugging DLLs at the 
  2422. source level. While SD386 has tried to remove barriers to DLL source debugging, 
  2423. there are still system and debugging requirements. These are: 
  2424.  
  2425. o Your DLL itself must be available to the debugger. This means it must be in a 
  2426.   directory that is specified in the LIBPATH statement to OS/2. 
  2427.  
  2428.   We suggest you use the CHKDLL32 tool which can tell you if all of your DLLs 
  2429.   are available. 
  2430.  
  2431. o If you do not have DLL initialization code, you should not make any of your 
  2432.   functions in your DLL be a main function. For C, this means no main() 
  2433.   function. For PL/X-86, this means no main procedure and no procedure with 
  2434.   options(main). 
  2435.  
  2436. o To set breakpoints in dynamically loaded DLLs, or DLLs which are not loaded 
  2437.   until the calling program issues a DosLoadModule call, you must use deferred 
  2438.   breakpoints. To set a deferred breakpoint, use the Function entry or Address 
  2439.   pulldowns on the Breakpoints menu. Enter the function name or address of the 
  2440.   deferred breakpoint. SD386 will ask you if you want to defer the breakpoint 
  2441.   and set it on the first occurence, all occurences, or not at all. SD386 will 
  2442.   cause the breakpoint to be inserted in your DLL when that DLL is loaded. 
  2443.  
  2444.   For example, you can set a deferred breakpoint on a function name in your 
  2445.   dynamically linked (run-time) DLL and it will be hit when that function is 
  2446.   invoked after the DLL is loaded. 
  2447.  
  2448.   Another method is to force the dynamically linked (run-time) DLL to be 
  2449.   statically linked by IMPORTing one of the function names from the DLL to the 
  2450.   EXE file. See Get Function in the File for more information about this. 
  2451.  
  2452.  
  2453. ΓòÉΓòÉΓòÉ 9.3. Assumptions ΓòÉΓòÉΓòÉ
  2454.  
  2455. SD386 must make various assumptions in order to debug your application program. 
  2456. Assumptions which may confuse you are described in the following section (Call 
  2457. Stack). 
  2458.  
  2459.  
  2460. ΓòÉΓòÉΓòÉ 9.3.1. Call Stack ΓòÉΓòÉΓòÉ
  2461.  
  2462. To display the program call stack (the CallStack pulldown on the Miscmenu), 
  2463. which displays a "how I got here" list of active function calls, SD386 assumes 
  2464. that standard call prologs and epilogs are used. By this we mean that each of 
  2465. your functions executes standard entry and exit code at the top and bottom of 
  2466. the function. Some of your code may not use such standard entry and exit code. 
  2467. Therefore, SD386 allows you to ask for a more rigorous look at the call stack 
  2468. with the <Show All> function on the CallStack pulldown. Because this search can 
  2469. take some time to perform, SD386 does not use the more rigorous algorithm 
  2470. unless you ask for it on the CallStack pulldown. Typically, you will need to 
  2471. use the <Show All> function for unwinding exception handlers and handwritten 
  2472. thunks. 
  2473.  
  2474. Note:  If your module does not contain any automatic data, i.e., data that 
  2475. resides on the stack, then there may be no stack frame generated for that 
  2476. module. In that case, SD386 may not be able to include that module in its call 
  2477. stack display unless you choose the more rigorous search algorithm. 
  2478.  
  2479.  
  2480. ΓòÉΓòÉΓòÉ 9.4. General Limitations ΓòÉΓòÉΓòÉ
  2481.  
  2482. This release of SD386 has the following limitations: 
  2483.  
  2484. o PL/X-86 source-level support is not complete. See Notes for PL/X-86 Programs 
  2485.   for details. 
  2486.  
  2487. o No edit capability for character arrays inside a structure. 
  2488.  
  2489. o No edit capability for bit strings. 
  2490.  
  2491. o No special support for debugging multi-process applications or child 
  2492.   processes. 
  2493.  
  2494. SD386 has the following general limitations: 
  2495.  
  2496. o You must be very careful when debugging a Presentation Manager (PM) program 
  2497.   to not switch screen groups at the wrong time. 
  2498.  
  2499. o You should invoke SD386 from a full-screen session if you are debugging a PM 
  2500.   application. This lessens the chance of a lockup due to PM message queue 
  2501.   traffic problems. 
  2502.  
  2503.   See Presentation Manager Limitations for more information. 
  2504.  
  2505.  
  2506. ΓòÉΓòÉΓòÉ 9.5. Presentation Manager Limitations ΓòÉΓòÉΓòÉ
  2507.  
  2508. In general, you should not indiscriminately switch screen groups (with the 
  2509. system key sequences C_Esc or A_Esc) because PM will lock up waiting for the 
  2510. target (debuggee) program to service its messages. Since the debuggee is under 
  2511. the control of a debugger, it cannot service its messages under some 
  2512. situations. If you switch screen groups and conditions are right (wrong?), you 
  2513. may end up with a system that is locked up. This condition exists because of 
  2514. the single-thread message handling characteristics of PM. It is improved in 
  2515. OS/2 2.x, but there are still instances where you can cause system problems 
  2516. when switching screen groups. 
  2517.  
  2518. Also, you should invoke SD386 from a full-screen session instead of from a 
  2519. window if you are debugging a PM application. This lessens the chance of a 
  2520. lockup due to PM message queue traffic problems. If you invoke SD386 from a 
  2521. window and debug a PM application, you risk system lockup because of this PM 
  2522. message queue limitation. 
  2523.  
  2524.  
  2525. ΓòÉΓòÉΓòÉ 9.6. Notes for PL/X-86 Programs ΓòÉΓòÉΓòÉ
  2526.  
  2527. To ensure maximum source-level support for PL/X-86 programs, you must use the 
  2528. following options: 
  2529.  
  2530. PL/X-86:    LOGIC 
  2531.  
  2532. AL/86:      LOGIC 
  2533.  
  2534. DebObj:     Use DebObj32 for 32-bit apps. Use DebObj16 for 16-bit apps. 
  2535.  
  2536. LINK386:    /CO 
  2537.  
  2538. See the sample modules below for examples. 
  2539.  
  2540. It is also a good idea to use the following AL/86 options. These options affect 
  2541. the output produced by DebObj. 
  2542.  
  2543. NOINC           Removes included source (brought in with %include statements) 
  2544.                 from the debugging source (.DEB) file produced by DebObj. This 
  2545.                 option can significantly reduce the size of the output .DEB 
  2546.                 file. You should not put executable statements in included 
  2547.                 files if you want to use the NOINC option - use included files 
  2548.                 only for declarations and comments. 
  2549.  
  2550. NOUNREFD        Removes unreferenced variables from the output debug 
  2551.                 information produced by DebObj. This option can significantly 
  2552.                 reduce the size of the output .OBJ file and can reduce the 
  2553.                 amount of time SD386 uses to find complex variables in the 
  2554.                 debug information in the resulting .EXE file. 
  2555.  
  2556.                 Unreferenced variables include simple variables which are 
  2557.                 declared but not used as well as structure members which are 
  2558.                 not used. Structures and members which also contain members 
  2559.                 are always considered referenced (by PL/X-86) even if they are 
  2560.                 never used in the code. 
  2561.  
  2562.  
  2563. ΓòÉΓòÉΓòÉ 9.6.1. Coding a PL/X-86 "Main" Procedure ΓòÉΓòÉΓòÉ
  2564.  
  2565. There are three ways to code a PL/X-86 "main" procedure: 
  2566.  
  2567.  1. Using a C model and not declaring your own stack means you plan to use the 
  2568.     C run-time library and act like a C main function. 
  2569.  
  2570.  2. Using a C model and declaring your own stack means you will not use the C 
  2571.     run-time library and will not act like a C main function, but your segments 
  2572.     will be grouped together by the linker like it would a C program. 
  2573.  
  2574.  3. Using a non-C model and declaring your own stack means you can have 
  2575.     separate data and stack segments, which gives more flexibility to larger 
  2576.     programs. 
  2577.  
  2578. Each method has advantages. Use of the C run-time library means your program is 
  2579. set up like a C program. In this case, PL/X-86 provides memory model support to 
  2580. match that of C. The C run-time start-up code is used, and your program's name 
  2581. must be main. Without the C run-time library, your program does not use the C 
  2582. start-up code and its name can be anything you want it to be. Bare-bones 
  2583. samples are shown below: 
  2584.  
  2585.  
  2586. ΓòÉΓòÉΓòÉ 9.6.1.1. Sample use of the C run-time library: ΓòÉΓòÉΓòÉ
  2587.  
  2588. Note:  You must specify the OS2 library (that comes with the OS/2 TOOLKIT) and 
  2589. the C run-time library (e.g., LIBC) when linking this example. 
  2590.  
  2591.  @process env(os2(32)) mach(i386v) model(flat) logic escape('\') asciiz;
  2592.  main: proc options( main );
  2593.  dcl main    entry options( linkage(c) );
  2594.  dcl DosExit  entry(fixed(15),fixed(15)) options(linkage(pascal)) far;
  2595.  /* insert your code or call your code here. */
  2596.  DosExit(1,0);
  2597.  end main;
  2598. PL/X Main Procedure - Flat Model with C run-time
  2599.  
  2600.  
  2601. ΓòÉΓòÉΓòÉ 9.6.1.2. Sample non-C model setup: ΓòÉΓòÉΓòÉ
  2602.  
  2603. Note:  You must specify only the OS2 library (that comes with the OS/2 TOOLKIT) 
  2604. when linking this example. 
  2605.  
  2606.  @process env(os2(32)) mach(i386v) model(flat) logic escape('\') asciiz;
  2607.  MyProc: proc options( noepilog , main , far );
  2608.  dcl DosExit  entry(fixed(15),fixed(15)) far options(linkage(pascal));
  2609.  dcl usrstk   stack(8192) external local near(ss);
  2610.  dcl dgroup   segment near(ds);
  2611.  /* insert your code or call your code here. */
  2612.  call DosExit(1,0);
  2613.  end MyProc;
  2614. PL/X Main Procedure - Flat Model without C run-time
  2615.  
  2616.  
  2617. ΓòÉΓòÉΓòÉ 9.6.2. Source-level Support ΓòÉΓòÉΓòÉ
  2618.  
  2619. SD386 does not provide full source-level support for PL/X-86 programs. In 
  2620. particular, the following capabilities are not yet available: 
  2621.  
  2622. o Typed display of some complex based variables. 
  2623.  
  2624.   Many based variables, including those which are pointed to by a declared 
  2625.   pointer, may be displayed directly by the normal methods for displaying 
  2626.   variables (Watch Var function from the Source window, typing the based 
  2627.   variable's name in the Data window, etc.). 
  2628.  
  2629.   Based variables which are declared based or based(*) may be displayed by 
  2630.   typing a referencing pointer's name -> the based variable name in the Data 
  2631.   window, as in: 
  2632.  
  2633.     ptr1->BVAR
  2634.  
  2635.   You should also use this method (ptrname->basedvarname) for displaying based 
  2636.   variables which are respecified based on a secondary pointer. 
  2637.  
  2638.   Based variables which are based on a complex pointer expression cannot be 
  2639.   directly accessed. You must determine the referencing address yourself. If 
  2640.   you have a spare pointer which you can set to this address, then you can use 
  2641.   it as the referencing pointer and display ptr1->basedvar just like a 
  2642.   respecified variable or variable based(*) above. If you do not have a pointer 
  2643.   which you can set to this address, then you will be unable to display the 
  2644.   based pointer. 
  2645.  
  2646. o Complete display of bit strings which are longer than 64 bits. Longer strings 
  2647.   will be truncated in the Data window to 64 bits. 
  2648.  
  2649. o Multi-level structures are handled by treating members as simple variables. 
  2650.   Structure members which are structures themselves are displayed as 
  2651.   hexadecimal storage. You can expand the display of the sub-structures by 
  2652.   using the Expand Var function or the Format Var function in the Data window. 
  2653.   See Data Pulldown for details. 
  2654.  
  2655. o Evaluation of PL/X-86 expressions. 
  2656.  
  2657. o Array dimension support. 
  2658.  
  2659.   Since C arrays are normally 0-based, the SD386 support in this release 
  2660.   assumes arrays are 0-based. If you plan to mix C and PL/X-86 code or if you 
  2661.   want your PL/X-86 source to match the SD386 array bounds support, we suggest 
  2662.   you use the dlbound(0) @process option in PL/X-86. This option turns your 
  2663.   arrays that do not have a lower bound specified into 0-based arrays. 
  2664.  
  2665. o Multiple compilation (batch). 
  2666.  
  2667.   If you use multiple compilations or assemblies by putting more than one 
  2668.   @process statement in a PL/X-86 source file, the PC linker will not generate 
  2669.   correct line number tables for the resulting object file. This means you will 
  2670.   not be able to debug the resulting object file at the source level. For this 
  2671.   reason, the DebObj post-processor does not allow more than one @process 
  2672.   statement in one source file. 
  2673.  
  2674. o Unnamed Variables. 
  2675.  
  2676.   Declaring a variable without a name, such as a structure without a level one 
  2677.   name (dcl 1 *), causes PL/X-86 to generate a name for that variable. These 
  2678.   instances of generated names, if they are automatic (stack) variables, are 
  2679.   difficult to view with source-level debuggers. You should name each variable 
  2680.   to prevent this possibility. 
  2681.  
  2682. The following anomalies in PL/X-86 support exist: 
  2683.  
  2684. o An If-Then-Else construct may have different lines appear executable than you 
  2685.   might expect. For example, 
  2686.  
  2687.     If myvar1 < 23 then                    <- executable
  2688.       myvar2 = 5;                          <- executable
  2689.     Else                                   <- executable
  2690.       myvar2 = 6;                          <- not executable
  2691.   In this example, the else line is the executable line for the else clause. If 
  2692.   the condition is true, SD386 will stop at the else line but will not execute 
  2693.   the else clause. If the condition is false, SD386 will not stop at the else 
  2694.   line but will execute the else clause. 
  2695.  
  2696.   This anomaly should only happen for cases where there is only one statement 
  2697.   in the else clause. If there is a do loop in the else clause, all of the 
  2698.   statements in the do loop will be executable except for the do and end; The 
  2699.   else itself is the executable line for the do statement. So, we suggest you 
  2700.   place your else clauses in do loops if you want to set breakpoints in them. 
  2701.  
  2702.   The reason for this anomaly is the way PL/X-86 considers the else-stmt or 
  2703.   else-do combination to be all one statement and therefore one executable 
  2704.   line. 
  2705.  
  2706. In general, the following types of PL/X-86 variables should be available in 
  2707. SD386: 
  2708.  
  2709. o static external local 
  2710. o static external nonlocal 
  2711. o static (non-external) 
  2712. o automatic 
  2713. o based, based(*), based(simpleptr) 
  2714. o parameters which are passed by address 
  2715. o complex vars such as structs, arrays, character strings, bit definitions, bit 
  2716.   strings 
  2717.  
  2718.  
  2719. ΓòÉΓòÉΓòÉ 9.6.3. Disassembly ΓòÉΓòÉΓòÉ
  2720.  
  2721. In PL/X-86 programs, the ID option is the default. Use of this option causes 
  2722. the PL/X-86 compiler to place program ID information near the top of your 
  2723. module's code space. This ID information is actually data that is not executed. 
  2724.  
  2725. The current SD386 disassembler attempts to disassemble this data area as code. 
  2726. This causes incorrect disassembly for a short distance if you try to 
  2727. disassemble the first executable statement of a module, which is typically the 
  2728. proc statement itself. SD386 usually picks up the correct disassembly within a 
  2729. couple of source statements. 
  2730.  
  2731. The default disassembly mnemonics in SD386 are Intel mnemonics. If you prefer 
  2732. AL/86 mnemonics, you can switch with the Mnemonics pulldown on the Misc menu. 
  2733.  
  2734.  
  2735. ΓòÉΓòÉΓòÉ 9.7. Notes for C Programs ΓòÉΓòÉΓòÉ
  2736.  
  2737. To ensure maximum source-level support for C programs, you must use the 
  2738. following options: 
  2739.  
  2740. IBM C Set/2: /Ti /O- 
  2741.  
  2742. Microsoft C: /Zi /Od 
  2743.  
  2744. LINK386:    /CO or /DE 
  2745.  
  2746.  
  2747. ΓòÉΓòÉΓòÉ 9.7.1. Source in Include Files ΓòÉΓòÉΓòÉ
  2748.  
  2749. SD386 is unable to debug source you place in include (.h) files. You should 
  2750. place all code in source (.c) files and use include files for 
  2751. non-code-producing statements, declarations, prototypes, and comments. 
  2752.  
  2753.  
  2754. ΓòÉΓòÉΓòÉ 9.7.2. Source-level Support ΓòÉΓòÉΓòÉ
  2755.  
  2756. SD386 does not yet provide full source-level support for C programs. In 
  2757. particular, the following capabilities are not yet available: 
  2758.  
  2759. o Program scope support. 
  2760.  
  2761.   In the Data window, SD386 does not clearly delineate which stack frame a 
  2762.   local variable applies to. 
  2763.  
  2764. o Evaluation of C expressions. 
  2765.  
  2766.   SD386 does not have full C expression evaluation in the Data window and in 
  2767.   user input areas such as conditional breakpoints. 
  2768.  
  2769.  
  2770. ΓòÉΓòÉΓòÉ 9.7.3. Floating Point Suggestions for C ΓòÉΓòÉΓòÉ
  2771.  
  2772. If you use floating point, we suggest that you use an 80387 co-processor. There 
  2773. are enough problems with the floating-point emulation that it is much safer to 
  2774. use the co-processor. 
  2775.  
  2776.  
  2777. ΓòÉΓòÉΓòÉ 9.8. Single Step Slowness ΓòÉΓòÉΓòÉ
  2778.  
  2779. If you single step across a source line that compiles into a lengthy set of 
  2780. machine instructions, your machine may appear to be hung. Actually, it is 
  2781. single stepping many instructions. An example in C is: 
  2782.  
  2783. for ( i = 1 ; i = n ; i++ )
  2784. {
  2785.   stmts;
  2786. }
  2787.  
  2788. In this case, if you single step across the for statement, execution will be 
  2789. very slow if n is large. 
  2790.  
  2791.  
  2792. ΓòÉΓòÉΓòÉ 10. Example of Installing Peer Services ΓòÉΓòÉΓòÉ
  2793.  
  2794. The following are steps for installing a peer services: 
  2795.  
  2796. o Install LAPS(MPTS on Lan Server 4.0). Configure the lan adapters and 
  2797.   protocols.  On my machine, I configured the following adapter and protocols: 
  2798.  
  2799.            IBM Token-Ring Network Adapter
  2800.               IBM IEEE 802.2
  2801.               IBM OS/2 NETBIOS
  2802.  
  2803. o Install Lan Requester and Peer Services. Install and configure the Lan 
  2804.   Requester. You will need to enter a requester name and a domain name. I used: 
  2805.  
  2806.           Requester name: M605093
  2807.           Domain name   : LEXDOMCV
  2808.  
  2809.   Install and configure Peer Services. You will probably want to use a "User 
  2810.   Type" of "Share Level" here because it provides the simplest access to the 
  2811.   peer server's resources. A "User Type" of "User" will require the use of 
  2812.   userids and passwords by both the peer server and the client which would be 
  2813.   overkill for setting up remote debugging. 
  2814.  
  2815. o Shutdown/Reboot/Logon with generic userid and password. Logon to the lan as 
  2816.   follows: 
  2817.  
  2818.            logon USERID /p:PASSWORD
  2819.   where you literally use USERID and PASSWORD. 
  2820.  
  2821. o Select User Profile Management(UPM) Services. Go into User Account Management 
  2822.   and put in your real userid and password. Enter a "User Type" of 
  2823.   "Administrator" because Peer Services needs this. 
  2824.  
  2825. o Logoff/Logon under your real userid and password. 
  2826.  
  2827. o Share the directories. 
  2828.  
  2829.            net share joetest=c:\ /PERMISSIONS:XR /USERS:1
  2830.   will define an alias that you can net use to. 
  2831.  
  2832. o From the client machine, net use to the alias defined in step 6. 
  2833.  
  2834.            net use x: \\m605093\joetest
  2835.  
  2836.  
  2837. ΓòÉΓòÉΓòÉ 11. Problem Determination ΓòÉΓòÉΓòÉ
  2838.  
  2839. The following sections detail scenarios and solutions for various debugging 
  2840. problems. These topics are available: 
  2841.  
  2842. o No Source Code describes errors trying to display your source for debugging. 
  2843. o Miscellaneous SD386 Errors describes various SD386 error messages and what to 
  2844.   do about them. 
  2845.  
  2846.  
  2847. ΓòÉΓòÉΓòÉ 11.1. No Source Code ΓòÉΓòÉΓòÉ
  2848.  
  2849. If you invoke SD386 on your program and end up viewing assembly code instead of 
  2850. source, there are several possible causes: 
  2851.  
  2852. o You did not link your program with the /CO option, which causes debug 
  2853.   information to be placed in the executable file. 
  2854.  
  2855.   In this case, the lower left-hand corner of the SD386 display will not 
  2856.   contain a source file name, just an executable file name. 
  2857.  
  2858. o You did not compile your first module with the LOGIC option (PL/X-86), the 
  2859.   /Ti option (IBM C Set/2), or the /Zi option (Microsoft C), which cause debug 
  2860.   information to be placed in the object file. 
  2861.  
  2862.   In this case, the lower left-hand corner of the SD386 display will not 
  2863.   contain a source file name, just an executable file name. 
  2864.  
  2865. o You have your own run-time initialization code. 
  2866.  
  2867. o You are invoking a DLL that contains initialization code. SD386 stops in any 
  2868.   such DLL initialization code, which must be written in assembler. 
  2869.  
  2870.   In this case, the lower left-hand corner of the SD386 display will contain 
  2871.   the DLL name and possibly the source file name. 
  2872.  
  2873. o Your source files are not accessible by SD386. SD386 looks in the following 
  2874.   places (in order) for your source: 
  2875.  
  2876.     1. the current directory, 
  2877.     2. the directory specified to the compiler (if any), which ends up in the 
  2878.        EXE file for each OBJ file, 
  2879.     3. the directories specified in the SD386SRC environment variable, and 
  2880.     4. the directories in the system PATH. 
  2881.  
  2882. o In this case, the lower left-hand corner of the SD386 display will contain a 
  2883.   source file name as well as the executable file name. 
  2884.  
  2885. o You have renamed a source file. 
  2886.  
  2887.   In this case, the lower left-hand corner of the SD386 display will contain 
  2888.   the source file name it tried to find as well as the executable file name. 
  2889.  
  2890. o (PL/X-86 only) - you did not run the DebObj post-processor, which puts debug 
  2891.   info in the OBJ file. 
  2892.  
  2893.   In this case, the lower left-hand corner of the SD386 display will contain 
  2894.   the source file name A.DEB instead of the real file name. 
  2895.  
  2896.  
  2897. ΓòÉΓòÉΓòÉ 11.2. Miscellaneous SD386 Errors ΓòÉΓòÉΓòÉ
  2898.  
  2899. Some bugs that appear to be in SD386 itself are caused by user action. In 
  2900. particular, the /Zl compiler option (suppress default library selection) in C 
  2901. can cause SD386 to have protection exceptions, go south, or otherwise appear 
  2902. sick. You should never use the C compiler option /Zl if you plan to debug the 
  2903. output from that compilation. While the output may be debuggable in some cases, 
  2904. in many cases the resulting EXE file's debug information is severely corrupted 
  2905. and causes SD386 to crash. 
  2906.  
  2907. List of Common SD386 Errors 
  2908.  
  2909. Unable to open the EXE file. You specified an incorrect name for the EXE file 
  2910.           to be debugged. SD386 was unable to find the EXE file. 
  2911.  
  2912. Unable to start session. rc=xxxxx. SD386 was unable to start your application 
  2913.           with DosStartSession. The return code indicates the DosStartSession 
  2914.           error that occurred. The return code from  is displayed. You can find 
  2915.           these return codes in file BSEERR.H in the OS/2 Toolkit. 
  2916.  
  2917. Unable to initialize EXE. SD386 was unable to start debugging your program with 
  2918.           DosDebug. Contact SD386 support for further assistance. 
  2919.  
  2920. Invalid EXE file. The EXE file you specified to be debugged is not an EXE file. 
  2921.           This is probably due to a problem building the file. 
  2922.  
  2923. Process Terminated. SD386 encountered a DosDebug error while starting your 
  2924.           application. Contact SD386 support for further assistance. 
  2925.  
  2926. User Profile Error. The SD386 profile that SD386 found contains errors. Use a 
  2927.           different SD386 profile or edit the profile to remove the errors. 
  2928.  
  2929. Cannot Find Entry Point. SD386 looks for the entry point for your application. 
  2930.           The entry point name depends on the language, compiler, and linkage 
  2931.           for your application. SD386 searches for the entry point for each 
  2932.           type of linkage that it knows about. Contact SD386 support if your 
  2933.           application was compiled and linked correctly and you get this 
  2934.           message. 
  2935.  
  2936. Cannot start session. Check DLL Path. SD386 was unable to find one of your 
  2937.           DLLs. Many times, one of the DLLs your program needs is not in a 
  2938.           sub-directory which is in the LIBPATH. SD386 is then unable to open 
  2939.           the DLL file. We suggest you use the CHKDLL32 program which will tell 
  2940.           you if all of your DLLs are available or which ones are unavailable. 
  2941.  
  2942.           Note:  One common error, especially if you're converting a 16-bit app 
  2943.           to 32-bit, is to compile some of your code as 16-bit when it really 
  2944.           should be 32-bit. If you link this erroneous 16-bit code in with your 
  2945.           32-bit code, you may get this error message with rc = 180. 
  2946.  
  2947. Too Many DLLs. SD386 ran out of room trying to initialize all of your DLLs. 
  2948.           SD386 has a limit of 1000 DLLs and your application has exceeded this 
  2949.           limit. Contact SD386 support. 
  2950.  
  2951. Bad Symbolic Info. SD386 encountered errors in the debug information in your 
  2952.           application. SD386 will allow assembler level debugging for the DLL 
  2953.           file in question. Contact SD386 support to help find out what the 
  2954.           problem is. 
  2955.  
  2956. No Code Segments. SD386 did not find any code segments in your application. 
  2957.           This is probably due to an error in putting your application 
  2958.           together. 
  2959.  
  2960. DLL Initialization Error. SD386 was unable to initialize one of your 
  2961.           application's DLLs at either the source or assembler level. 
  2962.  
  2963. Unrecognized invocation option. You entered an SD386 option that cannot be 
  2964.           recognized. See Starting SD386 for a list of valid options. 
  2965.  
  2966. Restarting... Informational - SD386 is restarting your application. 
  2967.  
  2968. Co-Processor Not Loaded SD386 cannot display the co-processor registers if your 
  2969.           machine does not have a co-processor installed. 
  2970.  
  2971. Unable to find SD386.PRO in DPATH You attempted to save settings to your 
  2972.           profile and SD386 cannot find the profile. 
  2973.  
  2974. Unable to save to profile [profilename] SD386 was unable to save your changes 
  2975.           to the profile. Contact SD386 support for assistance. 
  2976.  
  2977. Saving Colors to profile [profilename] Informational - SD386 is saving your 
  2978.           colors to your SD386 profile. 
  2979.  
  2980. Saving Exceptions to profile [profilename] Informational - SD386 is saving your 
  2981.           exception settings to your SD386 profile. 
  2982.  
  2983. Selecting Tid [threadID] Informational - SD386 is selecting the thread you 
  2984.           chose. 
  2985.  
  2986. Incorrect expression The expression you entered cannot be parsed by SD386. 
  2987.  
  2988. Enter a function  name or address Informational - SD386 is asking for a 
  2989.           function name or address to find. 
  2990.  
  2991. Enter file name Informational - SD386 is asking for a file name to find. 
  2992.  
  2993. Enter immediate or deferred name or address Informational - SD386 is asking for 
  2994.           a function name or address for a breakpoint. 
  2995.  
  2996. Can't find that SD386 was unable to find the text string you entered. 
  2997.  
  2998. Can't modify this data! SD386 was unable to store the changed data item in the 
  2999.           target application's data area. Contact SD386 support for assistance. 
  3000.  
  3001. Invalid value for data type You attempted to change data in memory to a value 
  3002.           that is incompatible with the data item's type. 
  3003.  
  3004.  
  3005. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3006.  
  3007. SD386 can debug C++ programs written using IBM C-Set++; however debugging is 
  3008. somewhat limited since all of the IBM C-Set++ debug information is not 
  3009. supported. In this case, SD386 is considered to be "C++ tolerant".