Debugging C in VS Code

Knowing how to use a debugger for the tools that you use is one of the best investments you can make.

Debuggers help you explore the state of your program. They provide feedback much faster than other debugging methods, like print statements. They also allow you to see everything, whereas a print statement will only show what you choose to print. This can be very helpful when part of a program that you expect to be working correctly is actually misbehaving.

Advanced Operating Systems, the course that I’m currently taking for my Masters are Georgia Tech, requires that you spend a fair bit of time working in C. C is a fine language, but it is very cumbersome to debug programs without a debugger. Save yourself some frustration and set your debugging environment up before you start working on your program.

VS Code makes this very easy.

Setup

  1. Install the C/C++ extension

  2. Open up the “Run and Debug” pane

  3. Click the cog icon to open up the launch.json file which contains your debugging configuration

  4. Copy this into the launch.json file:

    {
      "name": "debug",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/<path to your compiled binary>",
      "args": ["<your program arguments>"],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        },
        {
          "description": "Set Disassembly Flavor to Intel",
          "text": "-gdb-set disassembly-flavor intel",
          "ignoreFailures": true
        }
      ]
    }
  5. Save the file and click on “Start Debugging”

VS Code will launch your binary and attach a debuggger. You can do all of the usual debugger things like set breakpoints and inspect program state.

Recent posts from blogs that I like

Making any integer with four 2s

There's a cute math puzzle that can be interesting to folks on very different levels: Some examples can be done by elementary school kids: \[\begin{align*} 1&=\frac{2+2}{2+2}\\ 2&=\frac{2}{2}+\frac{2}{2}\\ 3&=2\cdot2-\frac{2}{2}\\ 4&=2+2+2-2\\ 5&=2\cdot 2 +\frac{2}{2}\\ 6&=2\cdot 2\cdot 2 - 2\\ \end...

via Eli Bendersky

Paintings from Ukraine 1

A sketchy history from Soshenko and Shevchenko in the early 19th century, to Kuznetsov and Pokhitonov at the end, with 3 famous expatriates.

via The Eclectic Light Company

Remember, remember

(This might be a distressing read, so let me just say at the start that it ends ok and we are fine now.)

via Henrik Karlsson