Help Center
Help CenterFreeBASICUsing the FreeBASIC compiler

Debugging

Documentation


The debugger is in the bin\win32 or bin\dos directories (the GDB.EXE file), for the Windows and DOS versions respectively. It usually comes already installed in most Linux distros.


(Note: all commands should be typed without quotes and then [return] must be pressed.)


  • Compile the source code for your program in debug mode
    • use the -g command-line option to add debugging support, e.g. fbc -g myapp.bas.

  • Load your compiled program in GDB
    • For example, in Windows/DOS: gdb myapp.exe
    • Note: under windows if the GDB command prompt seems not to work well (like backspace not working), try set TERM=#win32con before launching GDB.

  • Set any arguments you want to send to your application
    • For example: set args arg1 arg2 argn.
    • You can also run GDB and pass the arguments directly to the application been debugged: gdb --args myapp.exe arg1 arg2 arg3.

  • Ensure GDB can see your program's source code directory
    • If the executable isn't in the same directory of the source files where it was compiled, type: dir path/to/my/application/sources.

  • Set a breakpoint in your program
    • Place a breakpoint in the first line using: b main.
    • To place a breakpoint in a function called func use: b FUNC.
    • Note: fbc exports variable/function names to UPPERCASE. GDB is case sensitive by default, but you can use the set language pascal command to change GDB to case-insensitive mode.

  • Use GDB shortcuts to run your code or to step through it
    • Type r to start running the application.
    • Type n to step to the next line, stepping over function calls.
    • Keep pressing [return] to step forward to the next line.
    • Type s to step into function calls.
    • As above, keep pressing [return] to step through.
    • Type c to continue execution until the next breakpoint.

  • Use GDB shortcuts to inspect variables
    • Use print VAR_NAME to show the contents of the variable called var_name.
      • GDB supports pointer/pointer field dereferencing, indexing and arithmetics too, so print *MYPOINTER will also work.
      • (note: undeclared variables or the ones with suffixes like % & ! # $ can't be printed).
    • Use disp VAR_NAME to display the contents of a variable called var_name.
    • Use watch VAR_NAME to stop each time a variable called var_name is changed.

  • Additional commands:
    • Use r again to restart the application when it finishes.
    • Type q to quit.
    • Type help to see a list of commands, there are many others.