📘 מדריך תיאורטי + פרקטי
סביבת עבודה מלאה ל-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
3
עוברים לחלון Extensions
בצד שמאל של הממשק (או Ctrl+Shift+X)
5
מתקינים את התוסף של Microsoft
חשוב להבין
התוסף נותן זיהוי קוד, IntelliSense ואינטגרציה עם Build ו-Debug, אבל לא מתקין קומפיילר.
2התקנת g++ דרך MSYS2
על Windows לרוב אין g++ זמין כברירת מחדל, לכן מתקינים אותו דרך MSYS2.
1
נכנסים לאתר של MSYS2
msys2.org
2
יש להוריד את ה-installer ולהתקין
3
פותחים את הטרמינל של MSYS2
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
הקובץ המלא עם הסבר שורה שורה
12
"build/bin/<filename>.exe"
שורה 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
הקובץ המלא עם הסבר שורה שורה
8
"program": "${workspaceFolder}/build/bin/<filename>.exe",
11
"cwd": "${workspaceFolder}",
13
"externalConsole": false,
15
"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe"
שורה 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
Breakpoint
1
לפתוח את קובץ ה-cpp הרצוי
2
ללחוץ בשוליים השמאליים ליד שורת קוד
בדיקת משתנים
- Hover עם העכבר מעל משתנה
- או חלון Variables
מעבר שורה-שורה
| פעולה |
מקש |
מה זה עושה |
| Continue |
F5 |
ממשיך לרוץ עד breakpoint הבא |
| Step Over |
F10 |
מתקדם שורה בלי להיכנס לפונקציה |
| Step Into |
F11 |
נכנס לתוך פונקציה |
| Step Out |
Shift + F11 |
יוצא מהפונקציה הנוכחית |
✅סיכום
10זרימת העבודה הנכונה מעכשיו
4
Breakpoints ומעבר שורה-שורה
F10 / F11 / Shift+F11
הבדל קריטי לזכור
tasks.json אחראי על Build - איך יוצרים את ה-exe.
launch.json אחראי על Run / Debug - איך מריצים או מדבגים את ה-exe שכבר נוצר.
11הקבצים הסופיים שכדאי לשמור
8
"args": ["-g", "<filename>.cpp", "-o", "build/bin/<filename>.exe"],
9
"group": { "kind": "build", "isDefault": true }
8
"program": "${workspaceFolder}/build/bin/<filename>.exe",
9
"args": [], "stopAtEntry": false,
10
"cwd": "${workspaceFolder}",
11
"environment": [], "externalConsole": false,
13
"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe"