C Backend binaries (Default)

To debug issues in the generated binary (flag: -b c), you can pass these flags:

  • -g – produces a less optimized executable with more debug information in it. V will enforce line numbers from the .v files in the stacktraces, that the executable will produce on panic. It is usually better to pass -g, unless you are writing low-level code, in which case use the next option -cg.
  • -cg – produces a less optimized executable with more debug information in it. The executable will use C source line numbers in this case. It is frequently used in combination with -keepc, so that you can inspect the generated C program in case of panic, or so that your debugger (gdb, lldb etc.) can show you the generated C source code.
  • -showcc – prints the C command that is used to build the program.
  • -show-c-output – prints the output, that your C compiler produced while compiling your program.
  • -keepc – do not delete the generated C source code file after a successful compilation. Also keep using the same file path, so it is more stable and easier to keep opened in an editor/IDE.

For best debugging experience if you are writing a low-level wrapper for an existing C library, you can pass several of these flags at the same time: v -keepc -cg -showcc yourprogram.v, then just run your debugger (gdb/lldb) or IDE on the produced executable yourprogram.

If you just want to inspect the generated C code, without further compilation, you can also use the -o flag (e.g. -o file.c). This will make V produce the file.c then stop.

If you want to see the generated C source code for just a single C function, for example main, you can use: -printfn main -o file.c.

To debug the V executable itself, you need to compile from source with ./v -g -o v cmd/v.

You can debug tests with for example v -g -keepc prog_test.v. The -keepc flag is needed, so that the executable is not deleted, after it was created and ran.

To see a detailed list of all flags that V supports, use v help, v help build and v help build-c.

Command-line Debugging

  1. Compile your binary with debugging info v -g hello.v
  2. Debug with lldb or GDB e.g. lldb hello

Troubleshooting (debugging) executables created with V in GDB

Visual Debugging Setup

Native Backend binaries

Currently, there is no debugging support for binaries, created by the native backend (flag: -b native).

JavaScript Backend

To debug the generated JavaScript output, you can activate source maps: v -b js -sourcemap hello.v -o hello.js

For all supported options check the latest help: v help build-js