$DEBUG
Jump to navigation
Jump to search
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
$DEBUG is precompiler metacommand, which enables debugging features, allowing you to step through your code running line by line and to inspect variables and change their values in real time.
Syntax
Description
- $DEBUG injects extra code in the resulting binary, allowing the IDE to control the execution flow of your program.
- When $DEBUG is used, the IDE will connect to your running program using a local TCP/IP connection.
- You may get a prompt from your Operating System regarding this, so it may be necessary to allow the IDE to receive connections.
- No external connections are created, and your running program will only attempt to connect locally to the IDE.
- The default TCP/IP port starts at 9001. Multiple running instances of the IDE will attempt to open ports 9002 and up.
- You can change the base port in the Debug menu.
- The metacommand is supposed to be removed once your program is ready for release, although leaving it in won't have any effect if your program isn't run from the IDE.
- The only drawback of leaving the metacommand in is that your binary will end up being larger than required.
- In newer versions a precompiler flag named _DEBUG_ is available (see Availability):
Problems
- Note that C++ code optimization may badly interfere with the debugging features and that $CHECKING:OFF sections cannot be debugged by single stepping.
- For best debugging experience we recommend the following preparational steps:
- Remove or comment all $CHECKING:OFF lines in your program, at least for the sections which you intent to debug.
- From the Options menu select Compiler Settings and there disable the C++ code optimization check box and also make sure no -O flags are entered in the C++ Compiler Flags text box.
Availability
- Since QB64-PE v4.0.0 the precompiler flag _DEBUG_ indicates the state of $DEBUG at compile time.
$DEBUG Mode Operation
- To start execution in pause mode, you can use F7 or F8.
- There will be an arrow next to the line number where execution is paused, indicating the next line that will be run.
- When you enable $DEBUG mode, you can set breakpoints by clicking the line number at which you wish to stop execution. This can also be achieved by using the F9 key.
- Breakpoints are indicated by a red dot next to the line number.
- To clear all breakpoints, hit F10.
- To skip a line during execution, shift-click a line number
- Lines marked for skipping are indicated by an exclamation mark next to the line number.
- F4 opens the Variable List dialog, which allows you to add variables to the Watch List.
- During execution, the Variable List dialog also allows you to set the values of variables and also to create Watchpoints.
- Watchpoints halt execution, similarly to breakpoints, but do so when a variable matches the condition you specify.
- You can use relational operators (=, <>, >=, <=, >, <) to create watchpoint conditions.
- After a breakpoint or a watchpoint is reached, F5 can be used to continue execution.
- F6 can be used when the execution pointer is inside a sub/function. When used, execution will proceed until the procedure is ended.
- F7 can be used to run line by line, and can be used to debug code inside subs/functions (Step Into).
- F8 can be used to run line by line without entering sub/function calls (Step Over).
- F12 can be used to show the current call stack (which procedure calls led to the current line).
See also