home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / bcheck / readme.txt < prev    next >
Text File  |  1997-02-28  |  26KB  |  554 lines

  1.  
  2. BoundsChecker 5.0
  3. Visual C++ Edition
  4.  
  5. ReadMe File
  6.  
  7. Contents:
  8.  
  9. * What's New in BoundsChecker 5.0
  10. * Reporting Problems And Suggestions
  11. * Installation Prerequisites
  12. * Installation
  13. * If You Have A Previous Version Of BoundsChecker On Your System
  14. * Removing An Installation
  15. * Behavior of "BoundsChecker Rebuild All" in Visual C++ 4.x
  16. * Configuration Considerations for Visual C++ 4.x and 5.0
  17. * Known Anomalies    
  18. * Technical Notes
  19. * Using BoundsChecker With Visual Test 4.0
  20. * Using BoundsChecker With Symantec 7.0
  21. * Using BoundsChecker With Watcom 10.5
  22.  
  23.  
  24.  
  25. What's New in BoundsChecker 5.0 Visual C++ Edition
  26. --------------------------------------------------
  27.  
  28. --- New FinalCheck Technology ---
  29. One of the most significant features in BoundsChecker 5.0 is completely new 
  30. instrumentation using FinalCheck (TM), the advanced error 
  31. detection technology.
  32.  
  33.  
  34. --- Improved User Interface ---
  35. BoundsChecker now displays both errors and events in the new Program Results 
  36. window. This window is intended to help you focus on the most 
  37. pertinent error information and easily change the information 
  38. displayed. Also, you can now view program errors and events 
  39. dynamically as your program runs.
  40.  
  41. The Settings dialog has been revised to better define default error 
  42. detection settings and provide easier customization.   
  43.  
  44.  
  45. Reporting Problems and Suggestions
  46. ----------------------------------
  47.  
  48. Technical Support is available by e-mail at tech@numega.com or by 
  49. calling Technical Support at 603-578-8100. You can also fax us at 603-
  50. 578-8401 (attention: Technical Support).
  51.  
  52. Problem reports should include:
  53.  
  54. - System Configuration (CPU, RAM, OS, compiler, IDE)
  55. - Detailed problem description (include exact error message text)
  56. - How to reproduce problem
  57. - Whether you are compiling from IDE or command line
  58. - Options used in compiling and linking
  59. - Your error detection mode (Normal, Maximum, or Custom)
  60.  
  61. Installation Prerequisites
  62. --------------------------
  63.  
  64. * PC-compatible Intel 486 system or above
  65. * Microsoft Windows NT 3.51 or 4.0
  66. * Microsoft Windows 95
  67. * RAM: 32 MB minimum, 48 MB recommended
  68. * Disk: 12 MB for full installation
  69. * FinalCheck requires Microsoft Visual C++ 4.0 or later
  70. * IDE integration requires Microsoft Visual C++ 4.0 or later (Microsoft 
  71. Developer Studio)
  72. * Complete debugger integration (Smart Debugging) requires Microsoft 
  73. Visual C++ 4.0 or later (Microsoft Developer Studio)
  74.  
  75.  
  76. Installation
  77. ------------
  78.  
  79. To install BoundsChecker, insert the CD into your CD-ROM drive. Close 
  80. any programs that may be running. With Windows 95 or Windows NT 4.0, use 
  81. the Add/Remove Programs Control Panel. With Windows NT 3.51, use Program 
  82. Manager or File Manager to run setup.exe.
  83.  
  84. Visual C++ users: BoundsChecker expects that you have already set up the 
  85. command-line environment required by Visual C++. Normally this is done 
  86. when you install Visual C++. You need these environment strings 
  87. (assuming your Visual C++ installation is c:\msvc):
  88.  
  89.     include=c:\msvc\include;c:\msvc\mfc\include
  90.     init=c:\msvc
  91.     lib=c:\msvc\lib;c:\msvc\mfc\lib
  92.     path=c:\msvc\bin
  93.  
  94. Because of problems with Visual C++ and long file names, be sure to 
  95. install BoundsChecker using short (8.3) names for install directories, 
  96. if you plan on using the IDE integration or Smart Debugging.
  97.  
  98. The BoundsChecker installation directory needs to be in your path if you 
  99. plan to compile and link from the DOS command-line.
  100.  
  101.  
  102. If You Have A Previous Version Of BoundsChecker On Your System
  103. --------------------------------------------------------------
  104.  
  105. BoundsChecker32/NT or BoundsChecker for Windows 95: BCHK32NT and/or 
  106. BCHK32C must not appear in the path before the BoundsChecker directory. 
  107. If they do, BoundsChecker may crash or fail to detect errors because it 
  108. is trying to load obsolete libraries from the earlier product.
  109.  
  110.  
  111.  
  112. Removing An Installation
  113. ------------------------
  114.  
  115. To remove this product, run the Remove BoundsChecker program item.
  116.  
  117. "Remove" performs these steps:
  118.  
  119. - Deletes BoundsChecker files from the BoundsChecker installation 
  120. directory and sub-directories.
  121. - Deletes Visual C++ and Visual Test support files.
  122. - Removes BoundsChecker registry entries.
  123. - Removes BoundsChecker-specific Visual C++ and Visual Test registry 
  124. entries.
  125. - Deletes the BoundsChecker 5 program folder and items.
  126.  
  127. NOTES:
  128. - Files that were created after installation (such as Help system GID files) 
  129. will not be removed automatically. 
  130.  
  131.  
  132. Behavior of "BoundsChecker Rebuild All" in Visual C++ 4.x
  133. ---------------------------------------------------------
  134.  
  135. If you use BoundsChecker 5.0 Visual C++ Edition with the Microsoft Visual 
  136. C++ 4.x Developer Studio, you may find that the Tools menu item "BoundsChecker 
  137. Rebuild All" (and its associated shortcut on the BoundsChecker toolbar) does 
  138. not always behave as you expect. Specifically, if you are working with an 
  139. existing project, and your current project configuration (e.g., "Win32 Debug") 
  140. has been recently built such that all of its OBJ files are up to date in 
  141. relation to their source files, "BoundsChecker Rebuild All" will not be able 
  142. to force the files to rebuild for FinalCheck.
  143.  
  144. This happens because BoundsChecker's FinalCheck builds are accomplished by 
  145. running NMAKE on the makefile generated by Developer Studio.  "Rebuild All" 
  146. works by calling NMAKE with the "/A" command-line switch, which is supposed 
  147. to force the project to rebuild, regardless of the relative dates of the files.  
  148. However, most Developer Studio makefiles use the compiler switch "/Gm," which 
  149. means "minimal rebuild."  The minimal rebuild switch causes the compiler to do 
  150. its own dependency checking, independently of NMAKE.  The result is that NMAKE 
  151. calls CL for each source file, but CL compares the source file and its dependent 
  152. header files to the OBJ file, sees that the OBJ is newer and decides not to 
  153. recompile that file, printing out the message "No significant changes found, 
  154. skipping."  In other words, the compiler switch overrides the NMAKE switch.
  155.  
  156. There are several ways to work around this problem:
  157.  
  158. --- Create a new project configuration for BoundsChecker FinalCheck builds, 
  159. which will make a separate set of OBJ files.  This is the recommended method, 
  160. and is described both in the online help and in the manual.
  161.  
  162. --- Before you select "Rebuild All," delete the OBJ files for the project.  
  163. The easiest way to do this from within Developer Studio is to go to the Files 
  164. tab of the Project window, right-click on the project name, and select 
  165. "Delete intermediate files" from the menu.
  166.  
  167. --- Disable the "minimal rebuild" option.  In the Project | Settings dialog, 
  168. go to the C++ tab and remove the check next to the "Minimal rebuild" option.
  169.  
  170. Please note that this behavior does not occur with Visual C++ 5.0, because 
  171. BoundsChecker uses a different method of integration in that version of 
  172. Developer Studio.
  173.  
  174.  
  175. Configuration Considerations for Visual C++ 4.x and 5.0
  176. -------------------------------------------------------
  177.  
  178. If you will be installing both versions 4.x and 5.0 of Visual C++, there are 
  179. some configuration details that you should consider, as they will affect not 
  180. only BoundsChecker's ability to build programs properly under VC++ 4.x, 
  181. but your ability in general to build any project correctly from the command 
  182. line.
  183.  
  184. Both versions of the VC++ are capable of adding several items to your 
  185. environment, in particular to the PATH, LIB, and INCLUDE variables.  A common 
  186. scenario will be a system on which VC++ 4.x is already installed, to which 
  187. VC++ 5.0 is then added.  If during both installations you allow the setup 
  188. procedure to "Register Environment Variables," you will end up with: 
  189.  
  190. INCLUDE=c:\msdev\include;c:\msdev\mfc\include
  191. LIB=c:\msdev\lib;c:\msdev\mfc\lib
  192. PATH=c:\msdev\bin
  193.  
  194. After installing VC++ 5.0, your environment will look something like this:
  195.  
  196. INCLUDE=c:\DevStudio\vc\include;c:\DevStudio\vc\mfc\include;c:\msdev\include;c:\msdev\mfc\include
  197. LIB= c:\DevStudio\vc\lib;c:\DevStudio\vc\mfc\lib;c:\msdev\lib;c:\msdev\mfc\lib
  198. PATH=c:\DevStudio\vc\bin;c:\DevStudio\SharedIDE\bin;c:\msdev\bin
  199.  
  200. As you can see, the VC++ 5.0 directories will override the VC++ 4.x 
  201. directories.  The consequence of this is that any command-line build, either 
  202. with NMAKE or CL, will be performed with VC++ 5.0, whether you want that 
  203. or not.  This will cause problems also for any BoundsChecker FinalCheck build 
  204. done in the VC++ 4.x Developer Studio, for the same reason.
  205.  
  206. Therefore, we recommend that if you will be using both VC++ versions on the 
  207. same machine, you should not allow the setup program to add anything to your 
  208. environment  Microsoft provides a very reasonable alternative in the form 
  209. of a batch file called VCVARS32.BAT that will set up all the necessary 
  210. environment variables for a command line build in the current DOS session.  
  211. This file is usually contained in the \MSDEV\BIN directory (for VC++ 4.x) 
  212. or in the \DEVSTUDIO\VC\BIN directory (for VC++ 5.0).  Simply run the 
  213. appropriate version of this batch file in a new DOS session to initialize 
  214. the environment for the version of the compiler with which you will be 
  215. working.  
  216.  
  217. If you want to use Developer Studio, you should then start it from that DOS 
  218. session using the command "start msdev."  Developer Studio will inherit the 
  219. setting you just established.
  220.  
  221.  
  222.  
  223. Known Anomalies
  224. ---------------
  225.  
  226. --- BoundsChecker inadvertently reports an access violation error in the 
  227. Program Error Detected window if the application writes to its resource data. 
  228. This error report typically occurs once for each page of virtual memory 
  229. containing written resource data.
  230.  
  231. --- Due to a known problem in Windows95, it is possible to crash the 
  232. operating system when halting a program from the BoundsChecker Program 
  233. Error Detected window. Windows NT handles this situation properly, 
  234. however, Windows95 does not. The problem occurs when an application 
  235. calls ExitProcess (which BoundsChecker does to halt the application) and 
  236. one of the DLLs used by the application brings up a message box during 
  237. its DLL_PROCESS_DETACH processing sequence. To prevent this error 
  238. condition, avoid making any calls to MessageBox during your 
  239. DLL_PROCESS_DETACH processing.
  240.  
  241. --- Due to SmartHeap memory manager usage, it is possible, however 
  242. unlikely, that BoundsChecker will report false overruns of dynamically 
  243. allocated memory. In order to use BoundsChecker with the memory manager 
  244. provided with SmartHeap/HeapAgent, you must add the following lines to 
  245. the DEFAULT.DAT file, located in the BoundsChecker DATA directory (these 
  246. are the functions that overload malloc, calloc, realloc and free):
  247.               _MEM_malloc           ID  011
  248.               _MEM_calloc           ID  015
  249.               _MEM_free             ID  019
  250.               _MEM_realloc          ID  022
  251.  
  252. Once you have edited DEFAULT.DAT, BoundsChecker will keep track of the 
  253. heap correctly; both HeapAgent and BoundsChecker will be able to report 
  254. errors to you. 
  255.  
  256. --- BoundsChecker reports leakage when processing DLL_PROCESS_DETACH. 
  257. Since the order in which modules are unloaded cannot be controlled, 
  258. erroneous leakage reports can result when a DLL unloads after 
  259. BoundsChecker. This can occur when the following conditions are met:
  260. - user DLL allocates memory in DLL_PROCESS_ATTACH
  261. - user DLL frees the allocated memory in DLL_PROCESS_DETACH
  262. - BoundsChecker unloads before the user DLL
  263.  
  264. --- If NMCL cannot create the debug directory (because it already 
  265. exists) and causes nmake to fail, add the /N switch as the first 
  266. argument (before the existing /f switch) to the NMCL command in the 
  267. registry. The following keys are affected (Visual C++ 4.x):
  268. HKEY_CURRENT_USER/Software/Microsoft/Developer/BoundsChecker
  269.   Argument5 = '/N /f "$(WkspDir)\$(WkspName).mak" /t "%e" /c "%c" /B -4'
  270. HKEY_CURRENT_USER/Software/Microsoft/Developer/BoundsChecker
  271.   Argument6 = '/N /f "$(WkspDir)\$(WkspName).mak" /t "%e" /c "%c" /R -4'
  272. (This problem is known to affect 4DOS/NT users.)
  273.  
  274. --- Visual C++ IDE command line settings will override BoundsChecker 
  275. specific command line settings. If your project requires command line 
  276. settings, make sure they are set correctly in both Visual C++ and 
  277. BoundsChecker.
  278.  
  279. --- BoundsChecker does not automatically update all dependencies if your 
  280. .MAK file contains a different source path than the actual location of 
  281. your files. To correct this, make sure to update all dependencies before 
  282. running BoundsChecker Build or Rebuild All. (Visual C++ Edition Only)
  283.  
  284. --- BoundsChecker will use your IDE Options settings for include file 
  285. and library directories. If you change these settings, you must close 
  286. the IDE and reopen it to force BoundsChecker to pick up the changes. 
  287.  
  288. --- Running an instrumented program under the Visual C++ debugger may 
  289. cause the message 'Target out of date' to appear. This is normal Visual 
  290. C++ behavior. Visual C++ considers a target to be out of date if the 
  291. project has never been built with CL from the IDE (for example, if you 
  292. normally build with CL from the DOS command line). The message also 
  293. occurs after changing any of the project settings, and starting the 
  294. debugger before rebuilding with CL from the IDE. The message is 
  295. harmless, and you do not have to rebuild your project with BoundsChecker 
  296. before debugging. 
  297.  
  298. --- If you re-install Visual C++, the registry options used for 
  299. BoundsChecker IDE integration are lost. To restore them, run 
  300. BoundsChecker Setup, select Custom installation, and check only Visual 
  301. C++ support.
  302.  
  303. --- Program settings are keyed to an EXE name. If you are building a DLL 
  304. in the Visual C++ IDE, set the project "Executable for Debug Sessions" 
  305. to the fully qualified EXE name before setting BoundsChecker Error 
  306. Detection Settings. The EXE and the DLL will share the same settings.
  307.  
  308. --- In some instances, BoundsChecker may compile a file that you do not 
  309. think is in your project. Due to the way Visual C++ writes its 
  310. automatically generated MAK files, there is a rare instance in which 
  311. running NMAKE on the project MAK file compiles different files than 
  312. selecting the Build command from the IDE. The problem occurs when the 
  313. project contains a .cpp file (example test.cpp) and there is a junk file 
  314. in the same directory named test.c. The IDE build will build test.cpp, 
  315. but BoundsChecker will build test.c. A similar problem happens if a 
  316. project contains test.cxx, and there are junk files named test.cpp or 
  317. test.c. The solution is to remove or delete the junk file. This occurs 
  318. because BoundsChecker uses NMAKE to build, while the IDE uses its own 
  319. internal make procedure.
  320.  
  321. --- Under Windows 95, you must specify command.com as your COMSPEC if 
  322. you perform BoundsChecker Build or Rebuild All under the Visual C++ IDE. 
  323. Using 4DOS version 5.0f will result in a compilation error because 4DOS 
  324. does not pass all command line arguments to the BoundsChecker build 
  325. procedure. 
  326.  
  327. --- In some rare instances, BoundsChecker may falsely report an 
  328. incorrect number of arguments for sprintf functions for optimized code. 
  329. Use Suppress to prevent a false report on later runs.
  330.  
  331. --- If you perform a BoundsChecker Rebuild All on your project in the 
  332. Microsoft Visual C++ IDE after having done a normal build, and the 
  333. project is configured to build a browser database, BSCMAKE will fail.  
  334. This is because VC++ fails to release the BSC file open after building 
  335. the project, and the BoundsChecker build is thus unable to access the 
  336. file.  The workaround is to quit the IDE and restart it.
  337.  
  338. --- BoundsChecker may incorrectly report several memory and resource 
  339. leaks from dynamically loaded Delphi 2.X DLLs, because these memory and 
  340. resource allocations are implicitly freed. If you do not wish to be 
  341. informed of these leaks, the recommended work around is to run 
  342. BoundsChecker in Custom error detection mode, and make sure to disable 
  343. the 'Report errors even if no source code is available' setting. This 
  344. issue will be addressed in a future release.
  345.  
  346. --- Certain OLE interface methods, as implemented in some existing 
  347. applications, will return the error code E_NOTIMPL ("not implemented"), 
  348. although the OLE documentation indicates that this is not an acceptable 
  349. return code for these methods.  This is the list of methods for which 
  350. this sometimes occurs:
  351.  
  352.     IOleInPlaceObject::ContextSensitiveHelp
  353.     IOleInPlaceObject::ReactivateAndUndo
  354.     IOleObject::GetMoniker
  355.     IViewObject2::Freeze
  356.  
  357. Note that BoundsChecker will notify you of this error even if you are 
  358. running in Quick or Normal mode, or have unchecked the 'Check for OLE 
  359. "not implemented" return code errors' option in Custom mode.  This is 
  360. because we base our OLE error checking on documented OLE behavior.
  361.  
  362. --- OLE errors reported in OLE system DLLs:  In certain circumstances 
  363. BoundsChecker can report errors on OLE interface method calls that are 
  364. made inside system OLE DLLs such as OLE32.DLL and OLEAUT32.DLL.  These 
  365. errors are only reported in normal and maximum mode and are always OLE 
  366. return failure errors.  The reason these errors are reported is because 
  367. an interface, that was created and hooked by BoundsChecker, was passed 
  368. to an API function and that API is using it.  Since the interface was 
  369. created in the user's program, we still monitor it for error detection 
  370. even if it is inside a system DLL.
  371.  
  372.  
  373.  
  374.  
  375. Technical Notes
  376. ---------------
  377.  
  378. --- Preventing Leaks in DLL Startup Code: BoundsChecker will detect 
  379. leaks from the initialization code of a DLL that you cannot correct. To 
  380. prevent these reports, name your DLL entry point DllMain. BoundsChecker 
  381. recognizes DllMain, and knows not to check the startup code.
  382.  
  383. --- Debugging an NT service: Using the Registry Editor, go to 
  384. HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\. Create 
  385. a new key called "Image File Execution Options". Under this key, create 
  386. a subkey with the name of your service. For example, MYSERV.EXE. To this 
  387. subkey, add a REG_SZ value called Debugger. For the Debugger value, 
  388. enter the path to the BoundsChecker program (e.g., 
  389. C:\BChecker\BC.EXE). Exit the Registry Editor. Start up the Control 
  390. Panel, and double-click on the 'Services' icon. Highlight your service 
  391. to be checked. Click the 'Startup...' button. In the dialog box that 
  392. appears, select the 'Allow Service to Interact with Desktop' button. 
  393. Click OK. If you don't do these steps, BoundsChecker will run, but will 
  394. be invisible. At the main Control Panel | Services dialog, start your 
  395. service. BoundsChecker should appear, with the service already opened. 
  396. At this point, you can set any desired options and then run the service 
  397. via BoundsChecker. If your service starts automatically during NT's 
  398. bootup, use the Control Panel to set the 'Interact with desktop' 
  399. attribute, and then restart the machine. BoundsChecker should start 
  400. automatically when the service is started. (IMPORTANT NOTE: This only 
  401. works with Windows NT 3.51, or later versions!)
  402.  
  403. --- Automatically invoking BoundsChecker when a program is executed 
  404. (Windows NT only): You would use this if the program is invoked by some 
  405. other process, and you want to run BoundsChecker on this program. NOTE: 
  406. This works only on Windows NT, and will not work on Windows 95. As 
  407. always, be careful whenever you edit the registry. Using REGEDT32:
  408.  
  409. 1 Select the key
  410.   HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
  411.  
  412. 2 Under the selected key, add the following KEY, if it does not exist:
  413.   Image File Execution Options
  414.  
  415. 3 Under "Image File Execution Options" add this KEY:
  416.   FOO.EXE
  417.   (where FOO.EXE is the name of the program you want to test.)
  418.  
  419. 4 Under the "FOO.EXE" key add a new VALUE:
  420.   Value name: Debugger
  421.   Data type:  REG_SZ
  422.   String:     c:\Bchecker\bc.exe
  423.   (Where the string value is the full pathname for BoundsChecker on your 
  424. machine.)
  425.  
  426. --- Startup performance and alternate DEFAULT.DAT files: If your program 
  427. takes an unusually long time to start under BoundsChecker, you may want 
  428. to use one of the alternate DEFAULT.DAT files shipped with 
  429. BoundsChecker. First, backup your existing copy of DEFAULT.DAT by 
  430. renaming DEFAULT.DAT (in the BoundsChecker DATA directory) to 
  431. DEFAULT.BAK. Then, copy one of the alternate DEFAULT.xxx files to 
  432. DEFAULT.DAT:
  433. Microsoft C/C++ (includes Symantec)   DEFAULT.MSC
  434. Borland C/C++ (include Watcom)        DEFAULT.BOR
  435. Borland Object Pascal (Delphi 2.X)     DEFAULT.DPH
  436. All of the above                      DEFAULT.ALL
  437. NOTE: This is done automatically for you by the Setup program, based on 
  438. your compiler choice.
  439.  
  440. IMPORTANT: If you need to change or add support for additional compilers 
  441. after installing BoundsChecker, make sure to run Setup to install the 
  442. appropriate DEFAULT.DAT file (or copy the appropriate file/files as 
  443. described above).
  444.  
  445.  
  446. --- First chance exceptions when using Smart Debugging: When using Smart 
  447. Debugging, you may notice additional first chance exception messages in 
  448. the debugger output tab. These messages are generated by the Visual C++ 
  449. debugger whenever an exception occurs and are harmless if there is an 
  450. exception handler in the application to handle it. If there is no 
  451. exception handler, it becomes a fatal second chance exception and the 
  452. application terminates. BoundsChecker calls IsBadReadPtr() frequently 
  453. during its normal operation. If a bad pointer is passed to this 
  454. function, it will cause this message in the debugger's output tab. Since 
  455. the function handles the exception, it is a non-fatal notification that 
  456. can be safely ignored. When using Smart Debugging, NuMega recommends 
  457. that you use the Exceptions dialog from the Developer Studio Debug menu 
  458. to set the Access Violation exception to "Stop if not handled" (this is 
  459. the default setting).
  460.  
  461. --- Heap exceptions when running under a debugger in Windows NT 3.51: 
  462. When an application is debugged, the Windows NT memory management APIs 
  463. throw exceptions when bad parameters are detected. BoundsChecker uses 
  464. some of these APIs to perform parameter validation, which can cause 
  465. these exceptions to be thrown. At the request of many beta testers, we 
  466. now disable the Windows NT debug heap during Smart Debugging. If you 
  467. wish to re-enable the debug heap when using Smart Debugging, change the 
  468. following registry value to 0.
  469.  
  470.     HKEY_CURRENT_USER
  471.         \Software
  472.             \Microsoft
  473.                 \Developer
  474.                     \BoundsChecker
  475.                         \DisableHeapException
  476.  
  477.  
  478.  
  479.  
  480. Using BoundsChecker With Visual Test 4.0
  481. ----------------------------------------
  482.  
  483. When using the BoundsChecker with Visual Test, make sure that your 
  484. scripts wait for BoundsChecker to completely finish so all text is 
  485. properly sent to your BoundsCheckerNotification handler.  If the script 
  486. ends before BoundsChecker is finished, some error notifications might 
  487. not get through.  This is especially true with memory and resource leaks 
  488. since the application being tested must completely end before they can 
  489. be reported.
  490.  
  491. Here are two methods to make sure your script does not end prematurely:
  492.  
  493. 1 In the test script, following the commands to close the application 
  494. being tested, add a long enough sleep statement to allow BoundsChecker 
  495. to get all the information over to the notification handler (You may 
  496. need to use a value greater than the 60 used here).
  497. ...
  498. WSysMenu ( 0 )
  499. WMenuSelect ( "&Close" )
  500. Sleep ( 60 )
  501. End
  502. ...
  503.  
  504. 2 If the script is run interactively, a Pause statement will display a 
  505. message box and wait until the OK button is pressed before the script 
  506. will continue.
  507.  
  508.  
  509. Using BoundsChecker With Symantec 7.0
  510. -------------------------------------
  511.  
  512. The Symantec C\C++ compiler uses the Microsoft CodeView debug format, so 
  513. no special steps need to be taken during compile and link except to 
  514. include debug information. This can be accomplished by compiling and 
  515. linking with the following switches:
  516.  
  517. Compile: -g
  518. Link: /CO
  519.  
  520. As with any debugger, BoundsChecker works best if optimizations are 
  521. disabled, which can be done by compiling with the -od compiler switch.
  522.  
  523. The Symantec C\C++ compiler also uses the MFC class library. This is the 
  524. same MFC as is shipped with the Microsoft Visual C++ compiler. 
  525. BoundsChecker works the same with both the Microsoft and the Symantec 
  526. compilers.
  527.  
  528.  
  529. Using BoundsChecker With Watcom 10.5
  530. ------------------------------------
  531.  
  532. The Watcom 10.5 compiler is capable of producing CodeView compatible 
  533. debug information and thus is compatible with BoundsChecker.  
  534. BoundsChecker will not run correctly with versions of Watcom prior to 
  535. 10.5. To prepare your Watcom program for use with BoundsChecker:
  536.  
  537. 1 Compile with the following switches:
  538. -hc - Set output debug format - CodeView.
  539. -d3 - Full symbolic debugging with unreferenced type names.
  540. -od - disable optimizations
  541. -3s or -4s or -5s - add stack calling conventions
  542.  
  543. 2 Link
  544. Include the line:  DEBUG CODEVIEW
  545.  
  546. 3 CVPACK the executable
  547. After building the .EXE file, run CVPACK, found in the Watcom BINNT 
  548. directory, on the .EXE.
  549.  
  550.  
  551. -----------------------------------------------------------------
  552. Copyright 1997 NuMega Technologies, Inc.
  553. 03/03/97
  554.