# Häufige Probleme beim Setup

Quelle: https://inf.zone/extras/setup/issues/

**Wozu das Ganze?**

Hier stehen Probleme, die beim Einrichten der Kursumgebung oft vorkommen, jeweils mit dem, was hilft. Tippen Sie ein Wort aus der Fehlermeldung ins Suchfeld, oder wählen Sie Ihr Betriebssystem und Ihre Variante: Online ist [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/), Offline der [Dev Container](https://inf.zone/extras/setup/devcontainer-local/) auf dem eigenen Rechner, auch wenn Sie ihn unter Windows mit unserem Skript eingerichtet haben.

## Terminal und VS Code

### „make“ oder „check50“ wird nicht gefunden

*Betriebssystem: alle · Variante: Online, Offline*

`make`, `check50`, `style50`, `debug50` und `inf` gibt es nur in der Kursumgebung. Sie laufen im Terminal von VS Code, wenn VS Code mit dem Codespace oder dem Dev Container verbunden ist, nicht in PowerShell, in der Eingabeaufforderung von Windows, im Ubuntu-Fenster von WSL oder im Terminal des Macs. Typische Meldungen aus dem falschen Terminal sind „'make' is not recognized as an internal or external command“ (Windows) und „zsh: command not found: check50“ (Mac).

Beim Dev Container steht „[Dev Container]“ im Fenstertitel und links im Explorer. Ein Terminal öffnen Sie in VS Code über das Menü „Terminal“ → „New Terminal“.

### „inf: command not found“

*Betriebssystem: alle · Variante: Online, Offline*

`inf` kommt mit der Einrichtung des Containers für den Kurs. Prüfen Sie der Reihe nach:

1. Läuft das Terminal in der Kursumgebung? Im Dev Container steht „[Dev Container]“ im Fenstertitel, sonst [verbinden Sie sich zuerst](#kein-container).
2. Im Codespace: Haben Sie die Zeile aus Schritt 4 der [Anleitung](https://inf.zone/extras/setup/codespace-cloud/#codespace-einrichten) ausgeführt? Im Dev Container: Stand nach dem ersten Start „Container eingerichtet.“ im Terminal? Das dauert einige Minuten.
3. Schließen Sie das Terminal mit dem Papierkorb-Symbol und öffnen Sie ein neues. Erst ein neues Terminal kennt `inf`.

Fehlt `inf` dann immer noch, fügen Sie im Terminal diese Zeile ein und drücken Sie Enter:

> [!CAUTION]
> **Nie wahllos Skripte aus dem Internet laden und ausführen.** Eine Zeile wie diese lädt ein Programm aus dem Internet und reicht es sofort zum Ausführen weiter (`| bash`, `| iex`), mit allen Rechten Ihres Benutzerkontos und ohne dass Sie es vorher sehen. Wer Ihnen so eine Zeile unterschiebt, kann damit Ihre Dateien löschen, Passwörter mitlesen oder Schadsoftware einrichten. Führen Sie sie deshalb nur aus, wenn Sie der Quelle vertrauen, und genau so, wie sie dort steht: von dieser Seite (Adressen auf `inf.zone`) oder von der offiziellen Seite des Programms. Zeilen aus Foren, Chats, E-Mails, Videos oder von einer KI führen Sie nie ungeprüft aus.

```bash
curl -fsSL https://inf.zone/setup-container.sh | bash
```

Bricht sie ab, sagt die Zeile, die mit `setup-container:` beginnt, warum.

### Die Tastenkürzel aus der Anleitung funktionieren auf dem Mac nicht

*Betriebssystem: macOS · Variante: Online, Offline*

Die Anleitungen nennen meist die Tasten unter Windows. Auf dem Mac nehmen Sie `Cmd` statt `Strg`: Befehlspalette `Cmd + Shift + P`, Erweiterungen `Cmd + Shift + X`, Speichern `Cmd + S`. Im Terminal bricht `Ctrl + C` ein laufendes Programm ab, auch auf dem Mac.

### help50 oder die CS50 Duck: „No CS50_TOKEN or GITHUB_TOKEN was found“

*Betriebssystem: alle · Variante: Online, Offline*

`help50` lässt die Fehlermeldung vom CS50 Duck erklären, und der fragt dafür cs50.ai. Anmelden kann er sich dort nur mit einem Schlüssel, den es nur im Codespace gibt (`CS50_TOKEN` von der Anmeldung auf cs50.dev oder `GITHUB_TOKEN` von GitHub Codespaces). Im Dev Container fehlen beide: Dort kommt immer diese Meldung, und weder `help50` noch der Duck helfen. Einrichten lässt sich das nicht.

Im Codespace hilft es meist, sich auf [cs50.dev](https://cs50.dev) neu anzumelden und den Codespace ganz zu stoppen und neu zu starten. Sonst lesen Sie die Meldung des Compilers selbst, von der ersten Zeile an: `hello.c:5:12: error: …` nennt Datei, Zeile und Spalte. Hilft das nicht, fragen Sie Susi (Knopf unten rechts) oder bringen Sie die Meldung wörtlich ins Tutorium mit.

### GitHub Copilot fehlt, oder VS Code macht beim Tippen keine Vorschläge

*Betriebssystem: alle · Variante: Online, Offline*

Das ist so gewollt. Die Kursumgebung entfernt Copilot und ähnliche Erweiterungen, schaltet die KI-Funktionen von VS Code ab und zeigt beim Tippen keine Vorschläge. Sie müssen dafür nichts installieren oder ausschalten.

Das gilt im Codespace und im Dev Container. Öffnen Sie VS Code ohne die Kursumgebung, gelten Ihre eigenen Einstellungen. Fragen zum Stoff und zu Fehlermeldungen beantwortet Susi (Knopf unten rechts).

### Einfügen im Terminal klappt nicht

*Betriebssystem: alle · Variante: Online, Offline*

In der Kursumgebung gibt VS Code Tastenkürzel im Terminal an das Programm darin weiter, damit Kürzel wie `Strg + C` dort ankommen. Unter Windows und Linux fügt `Strg + V` im Terminal deshalb nichts ein.

- **Einfügen:** Klicken Sie mit der rechten Maustaste ins Terminal. Unter Windows fügt das sofort ein, sonst wählen Sie im Menü „Einfügen“ („Paste“). Auf dem Mac geht `Cmd + V` wie gewohnt.
- **Kopieren:** Text mit der Maus markieren, dann Rechtsklick (unter Windows kopiert schon das) oder „Kopieren“ („Copy“) im Menü. `Strg + C` bricht im Terminal das laufende Programm ab.

Im Editor gehen `Strg + C` und `Strg + V` wie gewohnt. Code gehört ohnehin dorthin, ins Terminal nur Befehle.

### „Starting directory (cwd) … does not exist“

*Betriebssystem: alle · Variante: Online, Offline*

Das Terminal soll in einem Ordner starten, den es nicht gibt. Meist ist das Fenster nicht mit der Kursumgebung verbunden: Ordner unter `/workspaces/…` gibt es nur im Container oder im Codespace, nicht auf Ihrem Rechner.

1. Steht „[Dev Container]“ im Fenstertitel, oder ist der Codespace verbunden? Sonst [verbinden Sie sich](#kein-container) bzw. öffnen den Codespace neu, und öffnen dann ein neues Terminal.
2. Haben Sie den Kursordner umbenannt oder verschoben, öffnen Sie ihn neu über „Datei“ → „Ordner öffnen“ und wählen „Reopen in Container“.

## Windows-Skript

### „Dieses Skript unterstützt nur Windows 11“

*Betriebssystem: Windows · Variante: Offline*

Das Skript läuft nur unter Windows 11 und hat nichts verändert. Nutzen Sie die Online-Variante: [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/). Damit arbeiten Sie im Browser genauso wie im Dev Container.

### Windows blockiert die Zeile („schädliche Inhalte“)

*Betriebssystem: Windows · Variante: Offline*

Microsoft Defender hält die Zeile manchmal für Schadsoftware, weil sie ein Skript lädt und sofort ausführt. Bei unserer ist das ein Fehlalarm. Schalten Sie den Virenschutz trotzdem nicht aus. Speichern Sie das Skript stattdessen erst als Datei und führen Sie es dann aus, mit den zwei Zeilen im Kasten „Wenn Windows die Zeile blockiert“ in der [Anleitung](https://inf.zone/extras/setup/devcontainer-local/), Schritt 2.

### „PowerShell ist auf diesem Rechner eingeschränkt“

*Betriebssystem: Windows · Variante: Offline*

Der Rechner wird von einer Firma oder Schule verwaltet, und PowerShell darf dort keine Skripte ausführen. Das Skript kann hier nichts einrichten. Nutzen Sie [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/) oder fragen Sie im Tutorium.

### „Auf Ihrem Rechner ist die Virtualisierung ausgeschaltet“

*Betriebssystem: Windows · Variante: Offline*

WSL und Docker brauchen die Virtualisierung des Prozessors. Sie lässt sich in den Firmware-Einstellungen (BIOS/UEFI) einschalten:

1. Speichern Sie, was offen ist. Start → Einstellungen → System → Wiederherstellung, bei „Erweiterter Start“ auf „Jetzt neu starten“. Dann: Problembehandlung → Erweiterte Optionen → UEFI-Firmwareeinstellungen → Neu starten. Fehlt der Eintrag, drücken Sie beim Einschalten `F2`, `F10`, `Entf` oder `Esc`.
2. Suchen Sie dort (meist unter „Advanced“, „CPU“ oder „Security“) „Intel Virtualization Technology“ bzw. „VT-x“, bei AMD „SVM Mode“ bzw. „AMD-V“, und stellen Sie sie auf „Enabled“. Speichern und beenden, meist mit `F10`.
3. Führen Sie nach dem Start von Windows die Zeile von der Website noch einmal aus.

Das Skript nennt dabei das Modell Ihres Rechners. Finden Sie die Einstellung nicht, suchen Sie im Netz nach dem Modell und „Virtualisierung BIOS“, oder kommen Sie mit dem Laptop ins Tutorium.

### Bei Fragen mit [j/n] passiert beim Drücken nichts

*Betriebssystem: Windows · Variante: Offline*

Das Fenster hat den Fokus verloren, etwa weil sich zwischendurch ein anderes Fenster geöffnet hat. Klicken Sie einmal oben auf die Titelleiste des PowerShell-Fensters und drücken Sie die Taste noch einmal, ohne Enter.

### Nach dem Neustart geht die Einrichtung nicht weiter

*Betriebssystem: Windows · Variante: Offline*

Normalerweise öffnet sich das Fenster nach der Anmeldung von selbst wieder. Kommt keins, führen Sie die Zeile von der Website noch einmal aus. Was schon erledigt ist, überspringt das Skript, es geht also an der richtigen Stelle weiter.

### Die Einrichtung unter Windows noch einmal durchlaufen

*Betriebssystem: Windows · Variante: Offline*

Führen Sie die Zeile von der Website in PowerShell noch einmal aus. Was schon erledigt ist, überspringt das Skript, es fragt nur nach dem, was noch fehlt. Ganz von vorn (WSL, Ubuntu und Docker entfernen) müssen Sie dafür nicht anfangen. Wollen Sie das trotzdem, fragen Sie zuerst im Tutorium.

### „Dieses Fenster läuft unter dem Konto …, angemeldet sind Sie als …“

*Betriebssystem: Windows · Variante: Offline*

PowerShell wurde mit „Als Administrator ausführen“ gestartet, und zwar mit einem anderen Konto als dem, mit dem Sie angemeldet sind. Dann würde das Skript alles für das falsche Konto einrichten. Drücken Sie `n`, schließen Sie das Fenster, öffnen Sie PowerShell normal und fügen Sie die Zeile dort ein. Wo Rechte nötig sind, fragt Windows selbst.

### Der Benutzername für Linux wird abgelehnt

*Betriebssystem: Windows · Variante: Offline*

Linux erlaubt im Benutzernamen nur Kleinbuchstaben ohne ä, ö, ü, dazu Ziffern, `_` und `-`, keine Leerzeichen. Schreiben Sie also etwa `susi` statt `Susi`. Den Vorschlag des Skripts übernehmen Sie einfach mit Enter.

Das Passwort tippen Sie zweimal, statt der Zeichen erscheinen Sternchen. Verwenden Sie nicht Ihr Windows-Passwort und speichern Sie es, etwa in einem Passwortmanager.

### Das Skript warnt vor dem gewählten Ordner (OneDrive, Downloads)

*Betriebssystem: Windows · Variante: Offline*

Ordner, die OneDrive synchronisiert, können beim Arbeiten Dateien sperren, und den Download-Ordner räumen manche Programme auf. Drücken Sie `n` und wählen Sie neu: Klicken Sie auf „Neuen Ordner erstellen“, tippen Sie `inf`, drücken Sie Enter und klicken Sie auf „OK“. Desktop und Dokumente sind meist ebenfalls mit OneDrive verbunden.

### „your 131072x1 screen size is bogus. expect trouble“

*Betriebssystem: Windows · Variante: Offline*

Harmlos. Die Zeile erscheint während der Einrichtung im PowerShell-Fenster des Skripts und kommt von einem Installationsprogramm von Ubuntu, das die Fenstergröße nicht lesen kann. Solange das Skript weiterläuft, ist nichts zu tun. Bricht es ab, führen Sie die Zeile von der Website noch einmal aus.

### WSL oder Docker lässt sich nicht installieren oder startet nicht

*Betriebssystem: Windows · Variante: Offline*

Das Skript sagt in gelben Zeilen, was zu tun ist. Meist hilft eins davon:

1. Internetverbindung prüfen (das Skript meldet sonst „Keine Verbindung zum Internet“).
2. Bei „Docker ist installiert, startet aber nicht“: Windows neu starten.
3. Die Zeile von der Website noch einmal ausführen. Was schon erledigt ist, wird übersprungen.

Klappt es dann nicht, kopieren Sie die Meldung in eine Frage an Susi (Knopf unten rechts) oder bringen Sie ein Foto des Fensters ins Tutorium mit.

### Das Skript fragt wegen eines ARM-Prozessors nach

*Betriebssystem: Windows · Variante: Offline*

Die Kursumgebung gibt es auch für ARM, auf Laptops mit Snapdragon haben wir sie aber noch nicht selbst ausprobiert. Sie können mit `j` hier einrichten. Klappt danach etwas nicht, etwa der Debugger, weichen Sie auf [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/) aus und sagen uns im Tutorium Bescheid.

### Wenig freier Speicherplatz

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Die Einrichtung braucht etwa 20 GB (Ubuntu mit Kursumgebung, VS Code, WSL), unter macOS und Linux etwas weniger. Räumen Sie vorher auf (Windows: Start → Einstellungen → System → Speicher). Reicht der Platz nicht, nutzen Sie [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/): Dort liegt alles bei GitHub.

### Unter Windows gibt es kein Docker Desktop

*Betriebssystem: Windows · Variante: Offline*

Mit unserem Skript läuft Docker in Ubuntu unter WSL, ganz ohne Docker Desktop. Container sehen und verwalten Sie dann in VS Code: links „Remote Explorer“, Unterpunkt „Dev Containers“.

Docker Desktop gibt es nur unter macOS, unter Windows bei der Einrichtung ohne unser Skript und, wer will, unter Linux.

## Dev Container

### VS Code bietet „Reopen in Container“ nicht an

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

VS Code sucht die Datei `.devcontainer.json` im geöffneten Ordner. Prüfen Sie:

1. Ist der richtige Ordner offen, Ihr Kursordner (etwa `inf`), nicht ein Ordner darüber oder darin?
2. Heißt die Datei genau `.devcontainer.json`, mit Punkt am Anfang und `.json` am Ende? Browser schlagen den Namen oft ohne Punkt vor, Windows hängt manchmal `.txt` an (im Explorer unter „Ansicht“ die „Dateinamenerweiterungen“ einschalten). Fragt macOS beim Speichern, ob der Name wirklich mit einem Punkt beginnen soll, bestätigen Sie mit „‚.‘ verwenden“. Heißt die Datei anders, etwa nur `.devcontainer`, benennen Sie sie um oder speichern Sie sie noch einmal von [inf.zone/devcontainer.json](https://inf.zone/devcontainer.json).
3. Im Finder und in den meisten Dateimanagern unter Linux ist die Datei unsichtbar, weil ihr Name mit einem Punkt beginnt. Einblenden auf dem Mac mit `Cmd + Shift + .`, unter Linux mit `Strg + H`.

Ist der Hinweis unten rechts nur verschwunden: `Strg + Shift + P` (Mac: `Cmd + Shift + P`), `Reopen in Container` tippen und den Eintrag wählen.

### „Docker version … is required“, obwohl Docker installiert ist

*Betriebssystem: macOS · Variante: Offline*

Klicken Sie nicht auf „Install“. VS Code findet Docker nur noch nicht, weil es schon lief, als Docker installiert wurde.

1. Prüfen Sie, ob Docker läuft: Oben rechts in der Menüleiste steht dann das Wal-Symbol. Fehlt es, starten Sie Docker aus dem Ordner „Programme“.
2. Beenden Sie VS Code ganz mit `Cmd + Q`. Das Fenster zu schließen reicht nicht.
3. Starten Sie VS Code wieder und wählen Sie noch einmal „Dev Containers: Open Folder in Container…“.

### „permission denied while trying to connect to the Docker daemon socket“

*Betriebssystem: Linux · Variante: Offline*

Ihr Konto darf Docker noch nicht ohne `sudo` benutzen. Fügen Sie es der Gruppe `docker` hinzu und melden Sie sich danach einmal ab und wieder an (oder starten Sie neu):

```bash
sudo usermod -aG docker $USER
```

Prüfen mit `docker run hello-world`: Es erscheint ein Text, der mit „Hello from Docker!“ beginnt.

### „Container eingerichtet.“ erscheint nicht

*Betriebssystem: alle · Variante: Online, Offline*

Die Zeile schreibt der Container nur, wenn er neu entsteht: beim ersten Start und nach „Rebuild Container“. Bei jedem weiteren Start läuft nur noch ein kurzer Schritt, den VS Code als „Running the postStartCommand from devcontainer.json“ meldet, und die Zeile kommt nicht wieder. Das ist richtig so.

Ob alles bereit ist, prüfen Sie im Terminal: Tippen Sie `inf`. Erscheint eine Liste der Befehle, ist der Container für den Kurs eingerichtet. Kommt stattdessen `inf: command not found`, ist die Einrichtung abgebrochen: Über der Meldung „Exit code 1“ steht dann, warum (siehe [Exit code 1](#exit-code-1)), sonst hilft der Eintrag [„inf: command not found“](#inf-nicht-gefunden).

### VS Code erreicht Docker nicht (Flatpak)

*Betriebssystem: Linux · Variante: Offline*

Die Flatpak-Fassung von VS Code läuft abgeschottet und erreicht Docker nicht. Installieren Sie VS Code als Paket von der [Website von Visual Studio Code](https://code.visualstudio.com/) (`.deb` für Debian und Ubuntu, `.rpm` für Fedora und openSUSE) oder aus der Paketquelle von Microsoft.

### Windows mit Docker Desktop: Der Container startet nicht („ubuntu.sock: no such file or directory“)

*Betriebssystem: Windows · Variante: Offline*

Ist auf Ihrem Rechner Docker Desktop installiert, nutzt VS Code dessen Docker, auch wenn Sie mit unserem Skript eingerichtet haben. Die Meldung heißt dann meist: Docker Desktop läuft nicht, oder es ist nicht mit Ubuntu verbunden.

1. Starten Sie Docker Desktop und warten Sie, bis es läuft.
2. Öffnen Sie dort „Settings“ → „Resources“ → „WSL Integration“, schalten Sie „Ubuntu“ ein und klicken Sie auf „Apply“.
3. Wählen Sie in VS Code noch einmal „Reopen in Container“.

Haben Sie Docker Desktop erst nach unserem Skript installiert, laufen auf Ihrem Rechner zwei Docker, eins in Ubuntu und Docker Desktop, und die beiden vertragen sich nicht. Entfernen Sie dann das in Ubuntu: Öffnen Sie über das Startmenü „Ubuntu“ und tippen Sie dort

```bash
sudo apt remove docker.io
```

Danach die Schritte oben. VS Code richtet den Container in Docker Desktop neu ein, Ihre Dateien im Kursordner bleiben. Melden Sie sich danach mit `inf login` wieder an. Bleibt die Meldung, suchen Sie die [vollständige Fehlermeldung](#log-anzeigen) und kopieren Sie deren letzte Zeilen in eine Frage an Susi.

### Exit code 1, bevor „Container eingerichtet.“ erscheint

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Beim ersten Start richtet sich der Container mit einem Skript für den Kurs ein (holt die Kurseinstellungen und installiert `inf`). Die Zeile über der Meldung, die mit `setup-container:` beginnt, sagt, warum es abgebrochen ist. Meist fehlte die Internetverbindung. Fügen Sie dann im Terminal des Containers diese Zeile ein und drücken Sie Enter:

> [!CAUTION]
> **Nie wahllos Skripte aus dem Internet laden und ausführen.** Eine Zeile wie diese lädt ein Programm aus dem Internet und reicht es sofort zum Ausführen weiter (`| bash`, `| iex`), mit allen Rechten Ihres Benutzerkontos und ohne dass Sie es vorher sehen. Wer Ihnen so eine Zeile unterschiebt, kann damit Ihre Dateien löschen, Passwörter mitlesen oder Schadsoftware einrichten. Führen Sie sie deshalb nur aus, wenn Sie der Quelle vertrauen, und genau so, wie sie dort steht: von dieser Seite (Adressen auf `inf.zone`) oder von der offiziellen Seite des Programms. Zeilen aus Foren, Chats, E-Mails, Videos oder von einer KI führen Sie nie ungeprüft aus.

```bash
curl -fsSL https://inf.zone/setup-container.sh | bash
```

Bricht auch das ab, bringen Sie die Zeilen über der Meldung ins Tutorium mit, oder kopieren Sie sie in eine Frage an Susi.

Bricht dagegen die Einrichtung im PowerShell-Fenster des Windows-Skripts ab, meldet das Skript selbst, was zu tun ist. Danach führen Sie die Zeile von der Website noch einmal aus.

### „setup-container: Kein Arbeitsordner unter /workspaces gefunden.“

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Meist beginnt der Name Ihres Kursordners mit einem Punkt, etwa `.inf` statt `inf`. Ordner mit einem Punkt am Anfang sind unter Linux versteckt: Das Einrichtungsskript findet den Ordner deshalb nicht, und auch die übrigen Werkzeuge von CS50 suchen ihn vergeblich. Einen Punkt am Anfang braucht nur die Datei `.devcontainer.json`, nicht der Ordner.

1. Schließen Sie VS Code.
2. Benennen Sie den Ordner auf Ihrem Rechner in `inf` um, ohne Punkt. Im Finder des Macs sehen Sie ihn erst nach `Cmd + Shift + .`.
3. Öffnen Sie den Ordner in VS Code und wählen Sie „Reopen in Container“. VS Code richtet dafür einen neuen Container ein. Warten Sie, bis im Terminal „Container eingerichtet.“ steht, und melden Sie sich mit `inf login` an.

Heißt der Ordner schon ohne Punkt, bringen Sie die Ausgabe von `ls -a /workspaces` ins Tutorium mit.

### „/bin/sh: 1: wslpath: not found“

*Betriebssystem: Windows · Variante: Offline*

Harmlos, solange `check50` über der Zeile fröhliche Gesichter zeigt. Die Meldung erscheint im Dev Container unter Windows, also gerade in der richtig eingerichteten Kursumgebung: Der Container läuft dort auf dem Linux von WSL, und ein Hilfsprogramm sucht deshalb `wslpath`, das es im Container nicht gibt. Nichts installieren, nichts neu einrichten, nicht in ein anderes Terminal wechseln.

Stehen traurige Gesichter da, ist etwas zu tun, aber wegen des Tests, der fehlschlägt, nicht wegen dieser Zeile.

### Im Remote Explorer wird kein Container angezeigt

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

- **Windows mit unserem Skript:** In VS Code den Kursordner öffnen (Menü „Datei“ → „Ordner öffnen“) und unten rechts auf „Reopen in Container“ klicken. VS Code startet den Container dann selbst.
- **Mit Docker Desktop (macOS, Windows ohne Skript):** Docker Desktop öffnen, unter „Containers“ den Container des Kurses mit ▶ starten, dann in VS Code im Remote Explorer verbinden.
- **Linux mit der Docker Engine:** `docker ps -a` zeigt den Container samt Namen, `docker start <Name>` startet ihn.

### Im Container läuft etwas grundsätzlich schief: neu erstellen

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Erstellen Sie den Container neu, statt ihn von Hand zu entfernen: `Strg + Shift + P` (Mac: `Cmd + Shift + P`), `Rebuild Container` tippen und „Dev Containers: Rebuild Container“ wählen. Nicht „Reopen in Container“, das verbindet nur wieder mit dem alten.

Ihre Dateien im Kursordner bleiben erhalten. Warten Sie, bis „Container eingerichtet.“ im Terminal steht, und melden Sie sich danach mit `inf login` wieder bei `inf` an.

Wollen Sie einen Container trotzdem ganz entfernen: Mit Docker Desktop im Reiter „Containers“ beim Container des Kurses das Papierkorb-Symbol. Mit dem Windows-Skript (ohne Docker Desktop) fragen Sie vorher im Tutorium. Ihre Dateien liegen im Kursordner auf dem Rechner, nicht im Container, und bleiben auch dabei erhalten.

### „Your codespace is already up-to-date!“ nach update50

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Dann liegt die neue `.devcontainer.json` schon in Ihrem Kursordner, meist weil Sie `update50` schon einmal aufgerufen haben. Der Container läuft trotzdem in der alten Fassung, bis Sie ihn neu erstellen: `Strg + Shift + P` (Mac: `Cmd + Shift + P`), `Rebuild Container` tippen und „Dev Containers: Rebuild Container“ wählen.

Beim Umstellen auf die ARM-Fassung geht es danach mit [Schritt 3 der Anleitung](https://inf.zone/extras/setup/devcontainer-arm/#3-programme-neu-übersetzen) weiter. Zeigt `uname -m` nach dem Neuerstellen immer noch `x86_64`, helfen die [Probleme und Lösungen](https://inf.zone/extras/setup/devcontainer-arm/#probleme-und-loesungen) dort.

### Die vollständige Fehlermeldung finden („Show Log“)

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Bricht das Öffnen oder Neuerstellen des Containers ab, zeigt VS Code unten rechts eine Meldung, oft nur „Command failed“. Klicken Sie darin auf „Show Log“: Dann erscheint das ganze Protokoll, und die Ursache steht meist in den letzten Zeilen vor dem Abbruch. Ist die Meldung schon weg: `Strg + Shift + P` (Mac: `Cmd + Shift + P`), `Show Container Log` tippen und „Dev Containers: Show Container Log“ wählen. Hat VS Code das Fenster inzwischen neu geladen, steht das Protokoll des letzten Versuchs unter „Dev Containers: Show Previous Log“.

Kopieren Sie die letzten Zeilen wörtlich in eine Frage an Susi (Knopf unten rechts), oder bringen Sie sie ins Tutorium mit.

### „Port forwarding … Local close with error“ im Protokoll

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Harmlos. VS Code leitet einige Ports des Containers auf Ihren Rechner weiter, damit Sie später im Kurs Webanwendungen im Browser öffnen können. Schließt sich eine dieser Verbindungen auf Ihrem Rechner, etwa weil ein Browser-Tab zugeht, schreibt VS Code diese Zeile ins Protokoll. Sie müssen nichts tun, solange `inf` im Terminal seine Befehle zeigt.

### Dateien aus dem Codespace in den Dev Container übernehmen

*Betriebssystem: alle · Variante: Online, Offline*

1. Laden Sie die Dateien aus dem Codespace herunter, wie unter [Download von Dateien aus dem Codespace](https://inf.zone/extras/setup/codespace-download/) gezeigt. Sie bekommen eine ZIP-Datei.
2. Entpacken Sie sie und kopieren Sie die Ordner der Aufgaben (etwa `me` und `mario`) in Ihren Kursordner auf dem Rechner, den Ordner mit `.devcontainer.json`.
3. Im Dev Container sind sie sofort da, denn der Container arbeitet direkt in diesem Ordner.

Ihre Abgaben müssen Sie nicht übertragen, sie liegen auf dem Abgabeserver. Melden Sie sich im Dev Container einmal mit `inf login` an.

### Die Kursumgebung wieder entfernen

*Betriebssystem: alle · Variante: Online, Offline*

Sichern Sie vorher, was Sie behalten wollen. `inf` müssen Sie nicht eigens entfernen, es liegt im Container und geht mit ihm.

- **GitHub Codespaces:** Laden Sie Ihre Dateien herunter ([Download von Dateien aus dem Codespace](https://inf.zone/extras/setup/codespace-download/)) und löschen Sie den Codespace dann unter [github.com/codespaces](https://github.com/codespaces): beim Codespace „…“ → „Delete“. Ungenutzt löscht GitHub ihn nach 30 Tagen ohnehin.
- **Docker Desktop (macOS, Windows ohne Skript):** Unter „Containers“ beim Container des Kurses das Papierkorb-Symbol, danach unter „Images“ die Einträge `ghcr.io/inf-zone/codespace` und `ghcr.io/cs50/codespace`. Docker Desktop und VS Code deinstallieren Sie danach wie jedes andere Programm.
- **Linux mit der Docker Engine:** `docker ps -a` zeigt den Container, `docker rm <Name>` entfernt ihn. `docker image ls` zeigt die Images, `docker image rm <Image>` entfernt eins.
- **Windows mit unserem Skript:** Docker läuft dort in Ubuntu unter WSL. Wer Ubuntu entfernt, löscht alles darin, auch was Sie dort außerhalb des Kurses angelegt haben. Fragen Sie dafür zuerst im Tutorium. VS Code deinstallieren Sie wie jedes andere Programm.

Ihr Kursordner auf dem Rechner bleibt bei all dem erhalten. Löschen Sie ihn selbst, wenn Sie ihn nicht mehr brauchen.

## Codespace

### Lange Eingabeaufforderung, „check50“ und „style50“ fehlen (Wiederherstellungsmodus)

*Betriebssystem: alle · Variante: Online*

Gelegentlich gerät ein Codespace in den Wiederherstellungsmodus (engl. „recovery mode“), weil ein externer Dienst ausgefallen ist, beim Erstellen des Containers ein Fehler aufgetreten ist oder die Datei `.devcontainer.json` fehlerhaft geändert wurde. Dann funktionieren die meisten CS50-Befehle wie `check50`, `style50` und `debug50` nicht, und Programme mit `cs50.h` lassen sich nicht kompilieren. Im Dev Container kann das nicht passieren.

Erkennen lässt es sich an der Eingabeaufforderung im Terminal. Im Wiederherstellungsmodus sieht sie so aus:

```
@githubBenutzername -> /workspaces/githubId (main) $
```

Normalerweise steht dort nur ein Dollarzeichen:

```
$
```

So beheben Sie es, Ihre Dateien gehen dabei nicht verloren:

1. Öffnen Sie ein neues Terminal und führen Sie dort diesen Befehl aus. Er lädt die Kurseinstellungen:
    ```
    curl -fsSL https://inf.zone/devcontainer.json -o /workspaces/$RepositoryName/.devcontainer.json
    ```
2. Stellen Sie sicher, dass die Erweiterung „GitHub Codespaces“ installiert ist:
    ```
    code --install-extension GitHub.codespaces
    ```
3. Drücken Sie `Strg + Shift + P` (Mac: `Cmd + Shift + P`), suchen Sie „Codespaces: Rebuild Container“ und drücken Sie Enter. Im Fenster, das sich öffnet, wählen Sie „Full Rebuild“, **nicht „Rebuild“**.
4. Der Codespace startet neu, sobald er wiederhergestellt ist, und richtet sich dabei wieder für den Kurs ein, samt `inf`. Die Anmeldung bei `inf` geht dabei verloren: Melden Sie sich mit `inf login` wieder an. Fehlt `inf` danach doch, steht unter [Abgeben mit `inf`](https://inf.zone/faq/uebung-solutions/#inf-einrichtung), was zu tun ist.

### Im VS Code auf dem Desktop fehlt der Remote Explorer

*Betriebssystem: alle · Variante: Online*

Das Symbol erscheint erst, wenn die Erweiterung „GitHub Codespaces“ installiert ist und Sie in VS Code mit GitHub angemeldet sind. Öffnen Sie den Codespace einmal im Browser auf [cs50.dev](https://cs50.dev) und wählen Sie dort im Menü „☰“ → „Open in VS Code Desktop“. VS Code bietet dann an, die Erweiterung zu installieren.

### Nach einem Neustart von VS Code ist der Codespace nicht mehr verbunden

*Betriebssystem: alle · Variante: Online*

Öffnen Sie in VS Code links das Panel „Remote Explorer“ (Bildschirm-Symbol), wählen Sie unter „GitHub Codespaces“ Ihren Codespace und klicken Sie auf „Connect to Codespace …“. Fehlt das Symbol, hilft der Eintrag [Im VS Code auf dem Desktop fehlt der Remote Explorer](#remote-explorer-fehlt). Im Browser öffnen Sie den Codespace einfach wieder auf [cs50.dev](https://cs50.dev).

### Den Codespace komplett zurücksetzen

*Betriebssystem: alle · Variante: Online*

Meist reicht ein Full Rebuild, Ihre Dateien bleiben dabei erhalten: `Strg + Shift + P` (Mac: `Cmd + Shift + P`), „Codespaces: Rebuild Container“ suchen und im Fenster, das sich öffnet, „Full Rebuild“ wählen. Der Codespace startet neu und richtet sich dabei wieder für den Kurs ein, samt `inf`. Die Anmeldung bei `inf` geht dabei verloren: Melden Sie sich danach mit `inf login` wieder an.

Läuft er im [Wiederherstellungsmodus](#wiederherstellungsmodus), gehen Sie wie dort beschrieben vor. Ein ganz neuer Codespace ist selten nötig und leer: Laden Sie dann vorher Ihre Dateien herunter ([Download von Dateien aus dem Codespace](https://inf.zone/extras/setup/codespace-download/)).

### Der Codespace ist nach einer längeren Pause weg

*Betriebssystem: alle · Variante: Online*

GitHub löscht einen Codespace, der 30 Tage lang nicht benutzt wurde, samt den Dateien darin. So ist es voreingestellt. Öffnen Sie ihn also zwischendurch einmal, oder laden Sie vor einer längeren Pause Ihre Dateien herunter ([Download von Dateien aus dem Codespace](https://inf.zone/extras/setup/codespace-download/)).

Ist er schon weg, legen Sie auf [cs50.dev](https://cs50.dev) einen neuen an und richten ihn ab [Schritt 4 der Anleitung](https://inf.zone/extras/setup/codespace-cloud/#codespace-einrichten) für den Kurs ein. Ihre Abgaben sind nicht verloren, sie liegen auf dem Abgabeserver.

## Debugger

### „Configured debug type 'cppdbg' is not supported“

*Betriebssystem: alle · Variante: Online, Offline*

`cppdbg` ist der Debugger der C/C++-Erweiterung von VS Code. Die Kursumgebung bringt sie mit, Sie müssen sie nicht von Hand installieren. Gestartet wird der Debugger im Kurs nur mit `debug50 ./programm` im Terminal, nicht über „Run and Debug“ oder den Startknopf von VS Code. Prüfen Sie der Reihe nach:

1. Ist VS Code mit der Kursumgebung verbunden („[Dev Container]“ im Fenstertitel, oder der Codespace)?
2. Auf einem Rechner mit ARM-Prozessor: `uname -m` (siehe nächster Eintrag).
3. Sonst das Fenster neu laden (Befehlspalette, „Developer: Reload Window“) und erneut `debug50 ./programm`. Hilft das nicht, den Container neu erstellen, bzw. den Codespace per Full Rebuild.

Bleibt die Meldung, bringen Sie sie und die Ausgabe von `uname -m` ins Tutorium mit. Zum Debuggen nutzen Sie bis dahin [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/).

### Debugger läuft nicht auf Mac mit Apple-Chip oder ARM-Laptop

*Betriebssystem: Windows, macOS, Linux · Variante: Offline*

Wer den Dev Container vor dem 18. Oktober 2026 eingerichtet hat, hat eine Fassung, in der der Debugger auf ARM nicht läuft (etwa „Couldn't get CS register: Input/output error“). Prüfen Sie im Terminal des Containers `uname -m`. Steht dort `x86_64`, stellen Sie nach [Dev Container auf ARM-Rechnern umstellen](https://inf.zone/extras/setup/devcontainer-arm/) um. Bis dahin geht der Debugger in [GitHub Codespaces](https://inf.zone/extras/setup/codespace-cloud/).

### Haltepunkte werden ignoriert

*Betriebssystem: alle · Variante: Online, Offline*

1. Mit `make` kompilieren, etwa `make hello`. `make` übersetzt in der Kursumgebung schon mit allem, was der Debugger braucht.
2. Links neben eine Zeilennummer klicken, es erscheint ein roter Punkt.
3. `debug50 ./hello` aufrufen, mit `./` und ohne `.c`.

`debug50` nimmt das Programm, nicht die Quelldatei, und ein eigenes `-g` ist nicht nötig. Ohne Haltepunkt läuft das Programm einfach durch. Gestartet wird der Debugger nur so, nicht über „Run and Debug“ oder den Startknopf von VS Code: Dafür ist im Kurs nichts eingerichtet. Im Codespace: Ist die Eingabeaufforderung lang, läuft er im [Wiederherstellungsmodus](#wiederherstellungsmodus).
