DEV Community

loading...

Run, Debug & get IntelliSense for C C++ in VSCode

gorvgoyl profile image Gourav Originally published at gourav.io on ・4 min read

You can read the updated article on my blog here


By the end of this short guide you’d be able to run, debug and get intelliSense for C/C++ files in VSCode. Though, this guide is focused for Windows platform but can be extended to Mac and Linux with some minor changes.

I extensively used C & C++ in my competitive programming years and wanted a better support for debugging & intellisense. Only options available were Dev-C++(outdated) and the original "Mammoth" Visual Studio.
Lately, I found VScode and fell in love with it (Atom also only till I found VScode). I tweaked around and set it up as complete IDE For small C, C++ projects especially geared towards competitive programming.

Create a sample C/C++ project

  1. Open/Create an empty folder in VSCode.
  2. Create a new.cpp file inside it like below:
#include \<iostream\>
using namespace std;
int main()
{
 cout \<\< "Hello World" \<\< endl;
 // uncomment below line to stop cmd from exiting immediately in case of "externalConsole": true
 //system("pause");
 return 0;
}
Enter fullscreen mode Exit fullscreen mode
  1. Install recommended C/C++ extension in VSCode and reload.

Official C/C++ Extension for VSCode

Install C/C++ Compiler

C/C++ extension does not include a C++ compiler. So, you will need to install one or use which is already installed on your computer.

Windows: Download MinGW64.zip (latest release) and extract it to the C Drive.

Mac: XCode

Linux: GCC

Also, Make sure to add C++ compiler PATH to environment variable of your platform. For Windows MinGW64 add: C:\MinGW64\bin

Enable IntelliSense

UPDATE: No configuration required in latest release, IntelliSense is enabled by default :)

Run and Debug C/C++ Code

You’ll notice that there is also a .vscode folder in your sample project. To configure ‘debug configuration’ 2 files are required launch.json and tasks.json inside .vscode folder.

VSCode can create and auto-configure these files if we try to debug for the first time. To do that, open C++ file in VSCode and either hit F5 or go to Debug -> Start Debugging and select C++ (GDB/LLDB) then select g++.exe build and debug active file.

Select C++ (GDB/LLDB)

Select g++.exe build and debug active file

This should create 2 files launch.json and tasks.json in .vscode folder which should look like below (update the MinGW64 path if not correct)

Notice that I’ve added one more optional configuration g++ build & run active file in launch.json and g++ build & run in tasks.json file for purpose of also Running C/C++ code without debugging. Now you may choose which configuration to pick when you start debugging. You may remove the configuration whichever you won’t need.

Run & Debug or Only run code

launch.json

{
 "version": "0.2.0",
 "configurations": [
 {
 "name": "g++.exe build and debug active file",
 "type": "cppdbg",
 "request": "launch",
 "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
 "args": [],
 "stopAtEntry": false,
 "cwd": "${workspaceFolder}",
 "environment": [],
 "externalConsole": false, //set to true to see output in cmd instead
 "MIMode": "gdb",
 "miDebuggerPath": "C:\\MinGW64\\bin\\gdb.exe",
 "setupCommands": [
 {
 "description": "Enable pretty-printing for gdb",
 "text": "-enable-pretty-printing",
 "ignoreFailures": true
 }
 ],
 "preLaunchTask": "g++.exe build active file"
 },
 {
 "name": "g++ build & run active file",
 "type": "cppdbg",
 "request": "launch",
 "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
 "args": [],
 "stopAtEntry": false,
 "cwd": "${workspaceFolder}",
 "environment": [],
 "externalConsole": false, //set to true to see output in cmd instead
 "MIMode": "gdb",
 "miDebuggerPath": "C:\\MinGW64\\bin\\gdb.exe",
 "setupCommands": [
 {
 "description": "Enable pretty-printing for gdb",
 "text": "-enable-pretty-printing",
 "ignoreFailures": true
 }
 ],
 "preLaunchTask": "g++ build & run active file"
 }
 ]
}
Enter fullscreen mode Exit fullscreen mode

tasks.json

{
 "tasks": [
 {
 "type": "shell",
 "label": "g++.exe build active file",
 "command": "C:\\MinGW64\\bin\\g++.exe",
 "args": [
 "-g",
 "${file}",
 "-o",
 "${fileDirname}\\${fileBasenameNoExtension}.exe"
 ],
 "options": {
 "cwd": "C:\\MinGW64\\bin"
 }
 },
 {
 "type": "shell",
 "label": "g++ build & run active file",
 "command": "C:\\MinGW64\\bin\\g++.exe",
 "args": [
 "${file}",
 "-o",
 "${fileDirname}\\${fileBasenameNoExtension}.exe"
 ],
 "options": {
 "cwd": "C:\\MinGW64\\bin"
 }
 }
 ],
 "version": "2.0.0"
}
Enter fullscreen mode Exit fullscreen mode

externalConsole in launch.json can be set to true to see code output in cmd instead.

Restart VSCode to take effects of newly added compiler paths.

Open any C/C++ file, set some breakpoints (or not) and hit the Big Green Play Button.

(Shortcut to debug: _ **_F5** )

Tip : To hide *.exe files in the side explorer of VSCode, open settings and paste the below config:

"files.exclude": {
 "\*.exe": true
 }
Enter fullscreen mode Exit fullscreen mode

Prefer to work in JAVA?

I’ve also added an answer here on how to run and debug Java code in VSCode.


Thanks for reading, you can also follow me on Twitter @GorvGoyl

Discussion (2)

pic
Editor guide
Collapse
ishiku_ultra profile image
Sam Goodnight

In launch.json and tasks.json
${fileDirnam} = my local path to exe? -> ${C:/Users/User/Desktop/c_folder/
And
${fileBasenameNoExtension} = a? given standard .exe name with gcc?

Or does vscode dynamically update these variables when i run debugger?

  • Thaks ahead of time.
Collapse
hieujunior profile image
hieu-junior

Thanks you very much
Your article has helped me a lot