Home | Tips | Library | Other Authors | Other WP Sites | Writer's Links | Contact | Site Map | Donate |
Barry MacDonnell's Toolbox for WordPerfect |
||
Macros, tips, and
templates for Corel® WordPerfect® for Windows® |
Page updated Jul 10, 2012 | |
WordPerfect Tips Main tips page | Browse more tips |
|
Simple tricks to help debug your macros |
I. Two simple methods Back up your macro first. Method #1 - slow down the macro to see
what's happening If you've created a macro that doesn't seem to work right or it just freezes up when you play it, here's a simple trick to help you figure out what's wrong: Edit the macro, and on the line under the "Application( ... )" command -- generally this is the first line in your macro, so start on line 2 -- add these two commands: Display
(On!) Then click Save & Compile on the Macro Toolbar. Turn WordPerfect's Reveal Codes window ON, then play the macro. Watch what happens in the Reveal Codes window. You may be able to tell where the macro is going wrong as it executes its commands. When you are done fixing things (also see the TIP below), delete the Speed() command and restore the Display command from Display(On!) to Display(Off!). The first command, Display(On!), will display all events during the macro's playback (if you get any dialog box error messages such as "... not found," just click OK and the macro should continue). Be sure there isn't a Display(Off!) under these commands; if there is, delete it or comment it out with double forward slash marks. The Speed() command slows down the macro's execution. You can set this to a higher number than "1" to really slow it down. As the macro plays, watch the screen and the Reveal Codes window. [More recent versions of WordPerfect support the Step() command (see below), but new users may find the Speed() command easier to use and understand.] Method #2 - stop the macro at different points You can also edit the macro and add the single command at the likely problem location: Quit Quit
causes the macro to stop immediately at that point. (The command is not
case sensitive so you can use QUIT, and even use bold or Redline or
Very Large size to make it easy to find while editing the macro code.) For debugging
purposes this is usually placed just after the command(s) that performs
some action that you suspect might be causing a problem or because you
wish to see the results of the macro at that point in the code. Then click Save & Compile the macro on the Macro Toolbar. Play the macro: If things worked OK to that point, delete the Quit command and enter another Quit command further down in the macro code. Repeat the process until you find the segment of code that is causing the problem. II. A slightly more advanced methodBack up your macro first. Method #3 - "step" through the macro with key presses Edit the macro. Add these two commands at the top of the code after any Application() command. Display(On!)
On the Macro Toolbar, click the Options button and check (enable) "Compile with Debug." Then click Save & Compile the macro on the Macro Toolbar. Open the document the macro is to be played on. Open Reveal Codes (View, Reveal Codes) so you can observe the actions of the macro as it steps through its commands. Play the macro. The PerfectScript Compiler Listing dialog appears, showing the name of a "listing" file that will be created. Click on OK (you can overwrite any existing .WCL listing file). The macro will start. When the macro reaches a new line of code, PerfectScript shows a new window, the PerfectScript Debugger. Drag it out of the way. F8 single-steps, F9 sets/removes a breakpoint, F5 runs the macro to the next breakpoint or the end of the macro. (Usually you have to tap F5 twice, to prove you really meant it.) When done debugging: (1) remove the check mark from Options, "Compile with Debug"; (2) Remove Display(On!) and Step(On!); and (3) click Save & Compile. Note: In the same
folder as the macro you may find a file with the same name as the macro
but with a .DBG extension. There may also be one with a .WCL extension.
You can delete both. [Thanks to Roy ("lemoto") Lewis for this tip.] |