מדריך עבודה עם C++ בסביבת VSCode

מהתקנה ועד Build, Run, Debug - כולל פתרון תקלות
📘 מדריך תיאורטי + פרקטי

סביבת עבודה מלאה ל-C++ ב-VSCode

הדף הזה מרכז את כל התהליך: התקנת הכלים, הגדרת Build ו-Debug, הבנה מלאה של tasks.json ו-launch.json, וכל הבעיות שיכולות לצוץ בדרך - כולל איך פותרים כל אחת מהן בפועל.

מה לומדים כאן

איך מקימים סביבת C++ ב-Windows עם VSCode, g++, gdb ו-Debug מלא.

מה הדגש

לא רק "מה לכתוב", אלא גם למה צריך כל קובץ, מה תפקידו, ואיך לתקן תקלות אמיתיות.

למי זה מתאים

גם ללמידה עצמית וגם כמדריך מסודר לסטודנטים בקורסי C++.

📖פתיחה

מה אנחנו רוצים להשיג

המטרה היא להגיע למצב שבו אפשר:

  • לכתוב קוד C++ בתוך VSCode
  • לקמפל אותו עם g++
  • לשמור את תוצרי הקומפילציה במקום מסודר
  • להריץ את התוכנית
  • לדבג עם breakpoints
  • להבין ולפתור תקלות נפוצות בדרך
הסטאק שבנינו

VSCode כעורך קוד, תוסף C/C++, MSYS2 + g++ בתור קומפיילר, ו-gdb בתור debugger.

מושגי יסוד שצריך להבין לפני שמתחילים

VSCode הוא לא קומפיילר

VSCode הוא עורך קוד וסביבת עבודה. הוא יודע להציג קוד, לצבוע תחביר, להפעיל משימות ולעבוד מול debugger, אבל הוא לא מקמפל C++ בעצמו.

לכן צריך קומפיילר חיצוני, למשל g++.

מה זה Build

לקחת קובץ מקור, למשל <filename>.cpp, ולהפוך אותו לקובץ הרצה כמו <filename>.exe.

מה זה Run

להריץ את קובץ ההרצה שכבר נוצר.

מה זה Debug

לעצור את התוכנית באמצע, לבדוק משתנים, להתקדם שורה-שורה ולהבין מה באמת קורה בזמן ריצה.

מה זה cl.exe

cl.exe הוא הקומפיילר של Microsoft (MSVC), שמגיע עם Visual Studio המלא. ב-Windows, VSCode לפעמים מוצא אותו אוטומטית ומגדיר אותו כקומפיילר ברירת מחדל - גם אם לא התכוונו לכך.

הבעיה: cl.exe לא תמיד מותקן, ו-gdb לא עובד איתו. לכן חשוב לוודא שב-tasks.json מוגדר במפורש g++ כ-command.

⚙️התקנה והגדרה

1התקנת VSCode והתוסף של C++

1
יש להוריד ולהתקין את Visual Studio Code

מאתר code.visualstudio.com

2
פתחו את VSCode
3
עוברים לחלון Extensions

בצד שמאל של הממשק (או Ctrl+Shift+X)

4
מחפשים C/C++
5
מתקינים את התוסף של Microsoft
חשוב להבין

התוסף נותן זיהוי קוד, IntelliSense ואינטגרציה עם Build ו-Debug, אבל לא מתקין קומפיילר.

2התקנת g++ דרך MSYS2

על Windows לרוב אין g++ זמין כברירת מחדל, לכן מתקינים אותו דרך MSYS2.

1
נכנסים לאתר של MSYS2

msys2.org

2
יש להוריד את ה-installer ולהתקין
3
פותחים את הטרמינל של MSYS2
4
מריצים את הפקודה הבאה:
pacman -S mingw-w64-x86_64-gcc

הפקודה הזו מתקינה את g++.

3הוספת g++ ל-PATH

גם אחרי שהקומפיילר מותקן, Windows עדיין לא בהכרח יודע איפה למצוא אותו. בשביל זה צריך להוסיף את התיקייה של g++.exe ל-PATH.

איפה g++ נמצא

C:\msys64\mingw64\bin

הוספה דרך PowerShell

[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","User") + ";C:\msys64\mingw64\bin", "User")

מה הפקודה עושה

  • קוראת את ערך ה-Path של המשתמש
  • מוסיפה אליו את הנתיב של g++
  • שומרת חזרה את הערך החדש
תיקון קריטי שכדאי להכיר

אחרי שינוי PATH יש לסגור את כל המופעים של VSCode ולפתוח מחדש. אם נשאר אפילו חלון אחד פתוח, VSCode ימשיך לעבוד עם PATH הישן.

איך בודקים

g++ --version

אם מתקבלת גרסה - ההגדרה הצליחה.

תקלות נפוצות

הפקודה g++ לא מזוהה

סיבה הנתיב של g++.exe לא נוסף ל-PATH.

פתרון להוסיף את C:\msys64\mingw64\bin ל-PATH ולסגור את כל חלונות VSCode. ראו הוראות מפורטות בסעיף 3, כולל פקודת PowerShell מוכנה.

g++.exe קיים, אבל g++ --version עדיין לא עובד

סיבה VSCode עדיין עובד עם PATH ישן.

פתרון לסגור את כל המופעים של VSCode ולפתוח מחדש.

4פתיחת פרויקט ומבנה תיקיות נכון

חשוב: כל הנתיב חייב להיות באנגלית

C:\Projects\MyProject
למה זה חשוב

ה-debugger של gdb על Windows עלול ליפול אם הנתיב כולל עברית, OneDrive, רווחים, או נתיב ארוך ובעייתי.

מבנה תיקיות מומלץ

project/
├── <filename>.cpp
├── <filename>.h
├── build/
│   ├── bin/
│   └── obj/
└── .vscode/
    ├── tasks.json
    └── launch.json

תקלות נפוצות

Debug נופל עם שגיאות לא ברורות

סיבה נתיב הפרויקט כולל עברית / OneDrive / רווחים.

פתרון להעביר את הפרויקט לנתיב באנגלית בלבד, ללא רווחים, כמו C:\Projects\MyProject.

🔨Build

5קומפילציה ידנית ראשונה

לפני שמגדירים אוטומציה, כדאי לבדוק שהקומפיילר עובד ידנית.

g++ <filename>.cpp -o build/bin/<filename>.exe
מה בדקנו

אם הפקודה הזו עובדת ויוצרת <filename>.exe - הקומפיילר מותקן ומחובר נכון.

6tasks.json - הגדרת Build אוטומטי

התפקיד של tasks.json

הקובץ הזה אומר ל-VSCode: כשרוצים לבצע Build, איזו פקודה בדיוק להריץ?

איפה הוא נמצא

.vscode/tasks.json

הקובץ המלא עם הסבר שורה שורה

📄 tasks.json - הגדרת Build ב-VSCode
1
{
2
"version": "2.0.0",
3
"tasks": [
4
{
5
"label": "build cpp",
6
"type": "shell",
7
"command": "g++",
8
"args": [
9
"-g",
10
"<filename>.cpp",
11
"-o",
12
"build/bin/<filename>.exe"
13
],
14
"group": {
15
"kind": "build",
16
"isDefault": true
17
}
18
}
19
]
20
}
שורה 2

version היא גרסת הפורמט של קובץ המשימות. בדרך כלל לא משנים אותה ידנית.

שורה 3

tasks היא הרשימה של כל המשימות. כאן אפשר להגדיר build אחד או יותר.

שורה 5

label הוא שם המשימה כפי שיופיע ב-VSCode אם בוחרים task ידנית.

שורה 6

type: "shell" אומר ל-VSCode להריץ פקודת shell רגילה בטרמינל.

שורה 7

command: "g++" בוחר בקומפיילר. כאן יש לוודא שמשתמשים ב-g++ ולא ב-cl.exe (ראו הסבר בהמשך).

שורה 8

args היא רשימת הפרמטרים שנשלחים ל-g++.

שורה 9

-g מוסיף debug symbols. בלי זה ה-breakpoints לא יעבדו.

שורה 10

קובץ המקור שמקמפלים. מציינים <filename>.cpp במפורש כדי למנוע קומפילציה של הקובץ הלא נכון.

שורות 11–12

-o מגדיר את קובץ הפלט - כך ה-exe נוצר ב-build/bin ולא בתיקייה הראשית.

שורות 14–16

isDefault: true גורם ל-Ctrl+Shift+B להפעיל דווקא את המשימה הזו.

תקלות נפוצות ש-tasks.json פותר
  • קומפילציה עם cl.exe במקום g++
  • יצירת תוצרי build בתיקייה הראשית
  • ניסיון לקמפל את tasks.json עצמו
  • breakpoints שלא עובדים בגלל היעדר -g

תקלות נפוצות

Ctrl + Shift + B יוצר קבצים בתיקייה הראשית

סיבה VSCode הריץ task ישן של cl.exe.

פתרון לוודא שב-tasks.json יש רק task אחד של g++, ושהוא מוגדר כברירת מחדל.

VSCode מנסה לקמפל את tasks.json

סיבה אם משתמשים ב-${file} והקובץ הפעיל היה tasks.json.

פתרון לשים שם קובץ מפורש, למשל <filename>.cpp.

Breakpoint לא עובד

סיבה התוכנית קומפלה בלי -g.

פתרון להוסיף -g ל-tasks.json ולעשות Build מחדש.

🐛Run & Debug

7launch.json - הגדרת Run ו-Debug

התפקיד של launch.json

הקובץ הזה אומר ל-VSCode: איך להריץ או לדבג את התוכנית שכבר נבנתה.

איפה הוא נמצא

.vscode/launch.json

הקובץ המלא עם הסבר שורה שורה

🐛 launch.json - הגדרת Debug ב-VSCode
1
{
2
"version": "0.2.0",
3
"configurations": [
4
{
5
"name": "Debug C++",
6
"type": "cppdbg",
7
"request": "launch",
8
"program": "${workspaceFolder}/build/bin/<filename>.exe",
9
"args": [],
10
"stopAtEntry": false,
11
"cwd": "${workspaceFolder}",
12
"environment": [],
13
"externalConsole": false,
14
"MIMode": "gdb",
15
"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe"
16
}
17
]
18
}
שורה 2

version היא גרסת הפורמט של קובץ ה-launch.

שורה 3

configurations היא רשימת קונפיגורציות Run/Debug. כאן יש לנו אחת.

שורה 5

name הוא השם שמופיע בחלון Run and Debug.

שורה 6

type: "cppdbg" אומר ל-VSCode להשתמש בדיבאגר של C/C++.

שורה 7

request: "launch" אומר להריץ תוכנית קיימת, לא להתחבר לתהליך שרץ כבר.

שורה 8

program הוא הנתיב של ה-exe שירוץ - מצביע ל-build/bin/Street.exe.

שורה 9

args היא רשימת פרמטרים לשורת הפקודה של התוכנית. כרגע ריקה.

שורה 10

stopAtEntry: false אומר לא לעצור אוטומטית בתחילת main.

שורה 11

cwd הוא ה-working directory של התוכנית בזמן הריצה.

שורה 13

יש להגדיר ל-false כדי שהפלט יוצג ב-Terminal של VSCode ולא בחלון חיצוני שנסגר מיד.

שורה 14

MIMode: "gdb" מגדיר את סוג ה-debugger שבו משתמשים.

שורה 15

miDebuggerPath הוא הנתיב המדויק אל gdb.exe. בלי השורה הזו תוצג שגיאת debugger.

תקלות נפוצות

בלחיצה על F5 נפתח חלון ונסגר מיד

סיבה ב-launch.json הוגדר "externalConsole": true.

פתרון לשנות ל-false.

8התקנת gdb

הקומפיילר g++ לא מספיק לדיבוג. צריך גם את gdb.

בטרמינל של MSYS2 מריצים:

pacman -S mingw-w64-x86_64-gdb

אחר כך בודקים שקיים:

C:\msys64\mingw64\bin\gdb.exe
איך לוודא שהתקנה הצליחה

אם הקובץ gdb.exe קיים בנתיב הזה - ה-debugger מוכן לשימוש.

תקלות נפוצות

Debug לא מוצא gdb

סיבה gdb לא הותקן.

פתרון להתקין דרך MSYS2 ולעדכן את miDebuggerPath.

9איך עובדים בפועל עם Build, Run ו-Debug

Build

להפעיל Ctrl + Shift + B. זה ייצור או יעדכן את build/bin/<filename>.exe.

Debug

1
ללכת ל-Run and Debug
2
לבחור Debug C++
3
ללחוץ F5

Breakpoint

1
לפתוח את קובץ ה-cpp הרצוי
2
ללחוץ בשוליים השמאליים ליד שורת קוד
3
אמור להופיע עיגול אדום

בדיקת משתנים

  • Hover עם העכבר מעל משתנה
  • או חלון Variables

מעבר שורה-שורה

פעולה מקש מה זה עושה
Continue F5 ממשיך לרוץ עד breakpoint הבא
Step Over F10 מתקדם שורה בלי להיכנס לפונקציה
Step Into F11 נכנס לתוך פונקציה
Step Out Shift + F11 יוצא מהפונקציה הנוכחית
סיכום

10זרימת העבודה הנכונה מעכשיו

1
כותבים או מעדכנים קוד
2
Build

Ctrl + Shift + B

3
Debug (אם צריך)

F5

4
Breakpoints ומעבר שורה-שורה

F10 / F11 / Shift+F11

הבדל קריטי לזכור

tasks.json אחראי על Build - איך יוצרים את ה-exe.
launch.json אחראי על Run / Debug - איך מריצים או מדבגים את ה-exe שכבר נוצר.

11הקבצים הסופיים שכדאי לשמור

📄 .vscode/tasks.json
1
{
2
"version": "2.0.0",
3
"tasks": [
4
{
5
"label": "build cpp",
6
"type": "shell",
7
"command": "g++",
8
"args": ["-g", "<filename>.cpp", "-o", "build/bin/<filename>.exe"],
9
"group": { "kind": "build", "isDefault": true }
10
}
11
]
12
}
🐛 .vscode/launch.json
1
{
2
"version": "0.2.0",
3
"configurations": [
4
{
5
"name": "Debug C++",
6
"type": "cppdbg",
7
"request": "launch",
8
"program": "${workspaceFolder}/build/bin/<filename>.exe",
9
"args": [], "stopAtEntry": false,
10
"cwd": "${workspaceFolder}",
11
"environment": [], "externalConsole": false,
12
"MIMode": "gdb",
13
"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe"
14
}
15
]
16
}
ליצירת קשר, מלא/י פרטים: