Introductie Visual Studio Express 2013 for Windows Desktop.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.

Inleiding.

Deze handleiding beschrijft hoe je Visual Studio Express 2012 for Windows Desktop kunt gebruiken om C programma's te ontwikkelen en te debuggen (logische fouten op te sporen). Als je Visual Studio Express 2013 for Windows Desktop wilt gebruiken om object georiënteerde C++ programma's te ontwikkelen kijk dan hier.

Visual Studio Express 2013 for Windows Desktop werkt alleen op Windows 7 en hoger, als je nog Windows XP gebruikt dan kun je gebruik maken van Microsoft Visual C++ 2010 Express Edition, zie hier.

Downloaden en installeren.

Je kunt een gratis versie van Visual Studio 2013 for Windows Desktop (de zogenaamde Express Edition) downloaden vanaf http://www.microsoft.com/en-us/download/details.aspx?id=44914.

Eenvoudig C programma compileren en uitvoeren met Visual Studio 2013.

Start Visual Studio 2013 en kies menu FILE => New Project... of klik op het knopje New Project (linksboven) of druk op Ctrl+Shift+N.

[Image]

Kies (klik op) Visual C++ en vervolgens Win32 Console Application. Type de naam van het programma in, bijvoorbeeld prog1, en klik op OK.

[Image]

Klik vervolgens op Next, vink het hokje Empty Project aan, vink het hokje Security Development Lifecycle (SDL) checks uit en klik op Finish.

[Image]

Kies menu PROJECT => Add New Item... of druk op Ctrl+Shift+A.

[Image]

Kies (klik op) Visual C++ en vervolgens op C++ File. Type de naam van het sourcebestand in, bijvoorbeeld main.c

Let op! Het is heel belangrijk om de extensie .c te gebruiken zodat de compiler weet dat je een C programma wilt schrijven (en geen C++ programma). C++ is een veel uitgebreidere taal dan C. De programmeertaal C++ komt bij de opleiding Elektrotechniek in het tweede jaar aan de orde.

[Image]

Type nu de code voor het programma in:

#include <stdio.h>

int main(void) {
    int a, b, product;
    a = 6;
    b = 10;
    product = a * b;
    printf("Het product van %d en %d is: %d\n", a, b, product);
    printf("\nSluit dit venster door op een toets te drukken");
    getchar();
    return 0;
}

Merk op dat Visual Studio je helpt bij het typen. Als je bijvoorbeeld printf( typt dan vult Visual studio meteen het ) in! Tevens laat Visual Studio zien welke argumenten je aan deze functie moet meegeven. Op dit moment zegt dat je waarschijnlijk nog niet veel, maar later zul je zien dat dit handig is.

[Image]

Klik nadat je het hele programma heb ingetypt op het Local Windows Debugger knopje. Je kunt ook op F5 drukken.

[Image]

Visual Studio snapt zelf dat het programma eerst gecompileerd moet worden. Als het goed is wordt het programma nu gecompileerd en uitgevoerd.

[Image]

Druk op return om het programma te stoppen.

Standaard C.

Als je zeker wilt weten dat een programma dat je ontwikkeld met Visual Studio ook werkt met andere compilers (bijvoorbeeld gcc) dan moet je geen gebruik maken de specifieke Microsoft extentions (uitbreidingen). Dit kun je instellen bij de properties van een project. Kies menu PROJECT => prog1 Properties... of druk op Alt+F7 om de Property Pages te openen.

[Image]

Klik op Configuration Properties, C/C++, Language en zet "Disable Language Extentions" op "Yes".

[Image]

Debuggen.

Deze debughandleiding is gedeeltelijk geschreven door Ruben Geluk (oud-student Elektrotechniek).

Je kunt het programma ook stap voor stap uitvoeren. Dat is erg handig als je een logische fout in je programma wilt opsporen.

Met de functietoets F10 (Step Over) kun je stap voor stap door het programma lopen. Als je 1x op F10 drukt stopt het uitvoeren bij de main functie. Een geel pijltje geeft aan waar de uitvoering gestopt is.

[Image]

Als je daarna 5x op F10 drukt worden de eerste 5 regels van main uitgevoerd.

Merk op dat je de lokale variabelen in het window linksonder kunt zien.

[Image]

Je ziet de waarden van de variablen a, b en product.

Als je (later) een eigen functie of hebt geschreven en je wilt dat deze functie ook stap voor stap wordt uitgevoerd dan moet je op F11 (Step Into) drukken op het moment dat deze functie wordt aangeroepen.

Als er logische fouten in je programma zitten dan is het soms erg lastig om die fouten te vinden. We kunnen de debugger gebruiken om te kijken of het programma doet wat we verwachten. Hieronder staan een aantal eenvoudige programma's. Deze programma's bevatten logische fouten, die niet door de compiler worden gemeld. Het lijkt dus alsof het programma prima werkt (volgens de compiler), maar de uitvoer van de programma's zijn niet juist. Met behulp van de Debugger kan nagegaan worden in welke statement een logische fout zich heeft verstopt.

Voorbeeld 1 - Bol

Om dit voorbeeld te begrijpen moet je bekend zijn met floating point variabelen in C.

Kees wil een programma schrijven dat de inhoud van een bol berekent als de straal van deze bol bekend is. Hij weet dat dit met de volgende functie gaat:

Zijn programma bol.c staat hieronder afgedrukt.

#include <stdio.h>

int main(void) {
    double inhoud;
    int straal = 2;
    double vier_pi = (4 * 3,14);

    printf("Debug Demonstratie Visual Studio 2013 Express Edition\n");

    inhoud=(straal * straal * straal * vier_pi) / 3;
    printf("Een bol met een straal van %d cm heeft een inhoud van %f cm^3", straal, inhoud);
    getchar();
    return 0;
}

Kees compileert het programma en het blijkt dat er geen syntax fouten inzitten. Als hij het echter uitvoert blijkt dat de inhoud van de bol niet juist berekend is. De uitvoer van het programma is:

[Image]

De juiste inhoud van een bol van 2 cm is echter 33.510321638291127876934862754981 cm3. We gaan nu uitzoeken waar deze fout zit.

Met F10 lopen we stap voor stap door het programma heen en we controleren de waarde van alle variabelen na elke stap.

[Image]

Hierboven zie je de waarden van de variabelen nadat de eerste 3 regels van main zijn uitgevoerd. De straal is gelijk gemaakt aan 2. Alles is nog zoals we verwachten. Kees drukt nogmaals op F10.

[Image]

Kees ziet nu dat de waarde van de variabele vier_pi 14.000 is geworden. Dat klopt natuurlijk niet. Er zit dus een fout in de regel:

    double vier_pi = (4 * 3,14);

Zie jij de fout?

In C moet de floating point constante 3,14 ingetypt worden als 3.14.

Na deze correctie blijkt het programma correct te werken:

[Image]

Het antwoord is nog niet erg nauwkeurig. Dit komt omdat Kees de constante pi niet erg nauwkeurig heeft ingevoerd.

Voorbeeld 2 - Machtverheffen

Om dit voorbeeld te begrijpen moet je bekend zijn met functies in C.

Gegeven is het volgende programma machtverheffen.c.

#include <stdio.h>

int main(void) {
    int x = 7;
    int y = 8;
    int macht;
    int xtoy(int a, int b);

    printf("Debug Demonstratie Visual Studio 2013 Express Edition\n");

    macht = xtoy(x, y);
    printf("\n7 tot de macht 8 = %d", macht);
    getchar();
    return 0;
}

int xtoy(int a, int b) {
    int tel;
    int answer = a;
    for(tel = 0; tel < b; tel++) {
        answer = answer * a;
    }
    return answer;
}

Neem dit programma over en voer het uit. In dit programma wordt 78 uitgerekend. Zoals iedereen kan nagaan is het juiste antwoord 5764801. Het programma levert echter een verkeerde waarde. Aan jou de opdracht om uit te zoeken waar deze fout zit. De werkwijze is dezelfde als bij de vorige opdracht. Stap door het programma heen en hou de variabelen in de gaten. Tip: wil je ook binnenin de functie xtoy stappen, gebruik dan F11 "Step Into" op het moment dat de functie wordt aangeroepen.

Kun je de fout vinden en herstellen? Zo niet mail voor een tip: mailto:bd@hhs.nl.

Voorbeeld 3 - Optellen

Om dit voorbeeld te begrijpen moet je bekend zijn met array variabelen in C.

#include <stdio.h>
#define AANTAL 4

int main(void) {
    int array[AANTAL] = {3, 5, 6, 9};
    int som;
    int TelOp(int lijst[]);

    printf("Debug Demonstratie Visual Studio 2013 Express Edition\n");

    som = TelOp(array);
    printf("De som van de 4 getallen is: %d", som);
    getchar();
    return 0;
}

int TelOp(int lijst[]) {
    int tel;
    int answer;
    for(tel = 0; tel < AANTAL; tel++)
    {
        answer = answer + lijst[tel];
    }
    return answer;
}

Neem dit programma optellen.c over en voer het uit. Bij het uitvoeren krijg je de volgende waarschuwing. Snap je deze melding?

[Image]

Als je op Continue drukt wordt het programma vervolgd.

Je ziet dat het antwoord niet correct is:

[Image]

Kun je (met behulp van de warning) de fout vinden en herstellen? Zo niet mail voor een tip: mailto:bd@hhs.nl.

Bedenk dat de meeste C compilers helemaal geen waarschuwing geven als deze code wordt uitgevoerd. Als je de beschikking hebt over een Linux PC, probeer dan maar eens wat er gebeurt als je dit programma met gcc compileert en runt.