Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[vs2005] vreemd gedrag bij debug

Pagina: 1
Acties:

  • PoweRoy
  • Registratie: April 2002
  • Laatst online: 22:53
Ik ben op dit moment bezig met het uitbreiden van een applicatie in c++ (met mfc). Bij het debuggen komen er vreemde situaties voor. Variabelen worden in de watchwindow als "out of scope" aangeduid. Variabelen die niet als "out of scope" worden aangeduid zijn weer onjuist. Bijvoorbeeld bij een for lus blijft de waarde steeds op 1 staan (hij zou bij 0 moeten beginnen)
Ook bij het steppen komt er vreemd gedrag voor.

Voorbeeldje:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
for(int i = 0; i < lengte; i++) //1
{
    for(int j = 0; j < lengte2; j++) //2
    {
        for(int k = 0; k < lengte3; k++) //3
        {
            switch(naam)
            {
                case kees:
                    dieiets();
                    break;
                case jaap:
                    dieiets();
                    break;
                default:
                    //wrong name
                    break;
            }
        }
    }
}

bool foundname = false;
for (int i = 0; i < lengte4; i++) //4
{
    foundname = false;

    for (int j = 0; j < lengte4; j++) //5
    {           
        if (namen1[i] == namen2[j])
        {
            foundname = true; //6
            break;
        }
    }

    if (!foundname) //7
    {
        result = "error no name found" //8
    }
}
    
return result.length()


code doet mooi de eerste 3 loops, gaat allemaal goed (hoewel sommige variabelen 'out of scope' zijn volgens de watch)

als we bij 4 aankomen gaat het mis.
Bij 4 is i altijd 1. De j is ook altijd 1. Dan word de ifstatement(7) uitgevoerd. Als er geen naam is voorgekomen dan zou 8 worden uitgevoerd moeten worden.
Ookal moet dat 1x voorkomen door de gegevens die ik ingegeven heb, door middel van steppen kom ik daar nooit. Maar het uiteindelijke resultaat klopt. Dwz error no name found wordt geprint in dit voorbeeld.

Nog iets leukers, als ik een breakpoint wil zetten bij 6 komt hij bij 8 te staan...

Wordt er een beetje gek van, het uiteindelijke resultaat klopt maar ik weet dus niet of de tussenliggende resultaten ook kloppen.
Dit gedrag komt voor bij debug, release en static/dynamic link naar mfc. (alle combinaties)

Geprobeerd te googlen maar kom uit op sites waar f5 vreemd gedrag had (vs2003) en een reinstall van vs2005 + sp1.

Heeft iemand een idee wat het kan zijn?

[This space is for rent]


  • maddog_rvo
  • Registratie: November 2000
  • Laatst online: 27-10 12:20
code echt compleet rebuilden?, het lijkt er een beetje op dat ie andere code uitvoert dan daadwerkelijk in je venster staat (mede omdat je break op een vreemde plaats terecht komt)

  • PoweRoy
  • Registratie: April 2002
  • Laatst online: 22:53
maddog_rvo schreef op woensdag 13 februari 2008 @ 09:32:
code echt compleet rebuilden?, het lijkt er een beetje op dat ie andere code uitvoert dan daadwerkelijk in je venster staat (mede omdat je break op een vreemde plaats terecht komt)
Nog een een clean en build gedaan. Zelfde resultaat. Ik kan blijkbaar ook geen breakpoint zetten bij 7...
Je ziet het er eerst staan en binnen een halve seconde is hij versprongen naar 8

[This space is for rent]


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 01-11 22:03

leuk_he

1. Controleer de kabel!

Maak je een debug build, of een release build. In dat laatste geval optimmaliseerd heel veel weg en zijn variable vaak uit of scope.

Ik snap uit je code ook niet wat voor type naam heeft.

In de switch address je hem als naam, maar verderop als een array (naam[i])

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • PoweRoy
  • Registratie: April 2002
  • Laatst online: 22:53
Debug en release, beide zelfde resultaat.

Ik heb deze code gepost als voorbeeld, structuur is hetzelfde, code erin niet. Verder worden alle vergelijkingen, zoals bij de switch en de if's, gedaan op int's.
heb wel onderaan naam array veranderd in namen voor de duidelijkheid

De waardes van deze int's (i,j,k en naam en namen[i]) zijn niet zichtbaar in de watches (out of scope). Door middel van cout kan ik nog wel een beetje debuggen maar omslachtig werk.

Dat vreemd jumpen van de curser vind ik het vreemde van alles.

[This space is for rent]