Skip to content

EclipseDebugInput

Harry Broeders edited this page May 2, 2022 · 2 revisions

Debuggen van een C-programma met in- en output functies in Eclipse

Gegeven het volgende voorbeeldprogramma:

#include <stdio.h>

int main()
{
    int input;
    do
    {
        printf("Type getal (0 stopt het programma): ");
        scanf("%d", &input);
        printf("Input = %d\n", input);
    } while (input != 0);
    printf("Bedankt en tot ziens.\n");
}

Als we dit programma compileren in Eclipse met behulp van de MinGW64 gcc compiler, en vervolgens uitvoeren, dan verschijnt de output pas na de gegeven input. In het onderstaande geval is de input 2 <Enter> 1 <Enter> 0 <Enter> gegeven.

Het is natuurlijk niet handig als de output pas aan het einde van het programma verschijnt. Dit kun je oplossen door als eerste regel in het programma de volgende code toe te voegen:

    setvbuf(stdout, NULL, _IONBF, 0);

De uit- en invoer verschijnt nu in de goede volgorde:

Als je dit programma stap voor stap wilt uitvoeren met behulp van de debugger, dan werkt dit niet correct. Als je over de eerste printf stapt, stopt het programma met de volgende melding:

Door een breakpoint te zetten op de tweede printf, en te runnen tot dit breakpoint kun je ontdekken wat er misgaat.

De debugger stopt niet bij de scanf maar leest een 'willekeurige' waarde in.

Dit kunnen we oplossen door geen gebruik te maken van de interne Console van Eclipse maar een externe console te gebruiken tijdens het debuggen.

Kies in het menu: Run > Debug Configurations... en selecteer vervolgens het tabblad Debugger. Zet een vinkje bij Use external console for inferior (open a new console window for input/output):

Nu verschijnt er een apart window waarin de output verschijnt en de input ingetypt kan worden:

De regel:

    setvbuf(stdout, NULL, _IONBF, 0);

is nu niet meer nodig.

Clone this wiki locally