Hacker’s Guide to Visual FoxPro
An irreverent look at how Visual FoxPro really works. Tells you the inside scoop on every command, function, property, event and method of Visual FoxPro.
SET DEBUGOUT
, Set(“DebugOut”)So how do you figure out what’s going on in a particularly knotty piece of code when it doesn’t do what you want? You might step through it, but sometimes the mere act of stepping through code changes the results. Often, you sprinkle it with messages that tell you what’s going on at various points in the code so you can see what’s happening without changing the results. These commands make that task much easier.
DEBUGOUT uExpression
SET DEBUGOUT TO [ FileName [ ADDITIVE ] ]
cDebugOutFile = SET("DEBUGOUT")
DEBUGOUT lets you send any message you want from your code to the Debug Output window of the debugger. You can pass it data of any printable type, even memo fields, and it handles it correctly. DEBUGOUT is a much better choice than the WAIT WINDOWs we’re all accustomed to using. By its very nature, WAIT can change the timing of activities in your code. The only thing DEBUGOUT does is take a tiny, tiny chunk of time to send the data you pass it along. Best of all, you don’t even really have to pull DEBUGOUT statements out of your code. If the Debug Output window isn’t available (either because it’s closed or because you’re running the runtime), the output just goes into the bit bucket.
SET DEBUGOUT
lets you send the output to a file as well as the Debug Output window. (Actually, if the debugger is closed, the redirected output goes only to a file.) Just specify a filename and VFP happily sends anything that’s going to the Debug Output window to that file as well. Include ADDITIVE to continue an existing file. Issue SET DEBUGOUT
TO with no filename to close the current output file.
One warning here: VFP empties the specified file as soon as you issue SET DEBUGOUT
, not the first time you put something in. So make sure you have the right filename before you press Enter.
SET(“DEBUGOUT”), of course, tells you the name of the current debug output file.
There’s one other point worth noting. The Debug Output window actually receives more than just DEBUGOUT statements. Assertion messages and any events being tracked land there, too, and are placed in the specified file, as well.
SET DEBUGOUT TO Whatgives.Txt
DEBUGOUT "See, this goes to the window and the file"
ASSERT .F. MESSAGE "Yuck!"
DEBUGOUT "You can send any type like this:"
DEBUGOUT DATE()
DEBUGOUT TIME()
DEBUGOUT 42