Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.07.2007, 12:22

VC++ Debugger Fehler?

Morgen

ich habe gestern ne kleine funktion geschrieben mit ner for schleife. Dabei gabs dann einige probleme, hab also unter anderem die zählvariable beobachtet (weil darüber index zugriffe liefen).

C-/C++-Quelltext

1
for(int i = 0, NpcMap[i]!="",  i++)


und der debugger wollte mir tatsächlich erzählen das NACH dieser zeile i = 3 wäre, bei jedem test. nachem 3. mal hats mich dann iwie gewundert, da auch 2 bekannte keinen fehler finden konnten und ich hab mal:

C-/C++-Quelltext

1
for(int i = 0; i!=0; i++)
geschrieben, der debugger meinte immernoch das i = 3 danach wäre, aber es gab keinen einzigen schleifen durchlauf, weil die bedingung dafür ja wäre das i NICHT 0 ist. also intern liefs richtig bloß der debugger hat mist angezeigt. Jetzt frag ich mcih natürlich immer ob ich dem trauen kann. habt ihr ähnliche Erfahrungen gemacht und wisst vllt Lösungen?

MfG
Eldarion

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

29.07.2007, 12:52

1) debuggst du auch mit der debug version?
2) NpcMap!="" was genau machst du da bzw. welchen typ hat NpcMap?
3) bei der ersten schleife hast du , anstatt von ; -> das kompilliert sicher nicht

3

29.07.2007, 12:55

o.O mir fällt grad auf das ich in release debuggt hatte, wegen performance. das was ich in der schleife mache ist eig. unwichtig, mittlerweile existiert der source in der form eh nicht mehr. es geht mir nur daraum warum er das int i = 0; nicht richtig angezeigt hat. dask ann ja eig. nichts mit der schleife zutun hben oder?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

29.07.2007, 12:56

das er da nicht richtig angezeigt hat liegt vermutlich an der release version. debugger und release version vertragen sich furchtbar schlecht ;)

mich würd immer noch interessieren was NpcMap!="" tun soll. wenn NpcMap kein array aus std::string oder sowas ist, dann riech ich verbranntes ;)

5

29.07.2007, 12:59

achso, ich hatte mich schon immer gewundert warum man in der release version noch haltepunkte etc setzen konnte^^ und dann hatte ich mir gedacht da die performanter ist, kann ich doch auch die nehmen. naja, danke für den hinweis :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

29.07.2007, 13:09

man kann haltepunkte setzen, aber evtl. is dir schonmal aufgefallen dass die dann z.b. anfangen zu wandern etc.
was bei der release version schon sinn macht, ist z.b. debuggen im disassembler.

7

29.07.2007, 13:25

ok, danke. aber mti dem disassembler kann ich eh noch nicht wirklich was anfangen. ist das einfach der assembler code der aus dem source erstellt wird?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

29.07.2007, 13:44

Das ist der Maschinencode nur wieder 1:1 zurückübersetzt in eine lesbare Assemblersprache.

Du sagtest i wäre nach der Schleife 3? Dann wärs ohnehin irrelevant was i für einen Wert hat, da du versuchst eine Variable außerhalb ihres Scopes zu lesen und der Compiler mit der Variable machen kann was er für richtig hält. Da du ohnehin nichtmehr auf die Variable zugreifen kannst/darfst! :)
@D13_Dreinig

9

29.07.2007, 14:45

nein, du hast das falsch verstanden, ich meinte nach dieser for(;;) zeile ;)
also direkt vor dem ersten durchlauf, aber wo schon die schleife initiert ist.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

29.07.2007, 15:30

Aber nur im Release-Modus, oder?
@D13_Dreinig

Werbeanzeige