Ich sehe Code wo keiner ist...(Visual Studio 6.0)
-
Hallo,
ich hatte das jetzt schon öfters mal, aber geschnallt hab ich das nie.
Ich habe eine Kodesequenz und wenn ich einen Breakpoint drauf setzte meldet Visual Studio, dass der Breakpoint an dieser Stelle nicht gesetzt werden kann (er macht aus dem Punkt dann nen Kreis)
Beim debuggen überspringt er den Kode einfach
Sieht ungefähr so aus:
if(a) { //macht irgendwas } // in das nächste if kann ich keinen Breakpoint setzen if(b) { #if irgendwas == 0 { // } #endif }
In die #if Direktive kann ich keinen Breakpoint setzen, das verstehe ich auch. Aber hallo, das obere if (das 2.) sollte doch gehen??
-
Hast du schon
Erstellen -> Bereinigen
und
Erstellen -> Alles neu erstellen
gemacht ?^Chuck Norris kann Breakepoints auf geschweiften Klammern setzen.^
-
Du kannst nur Breakpoints an richtigem Code setzen, also vor printf(""); z.B. - nicht etwa an { oder } ...
Im Übrigen ist der Titel sowas von (aber sowas von!!) irreführend...
-
@isabeau: jo, hab ich
@Sgt.Nukem: Sorry, aber der Titel trifft es ziemlich gut. Das mit den Breakpoints ist verwirrend.
Fakt ist, ich debugge schrittweise durch und wenn ich das besagte Kodestück erreiche, dann überspringt der Debugger das einfach.
Das mit den Breakpoints hab ich nur erwähnt um zu verdeutlichen, dass VS dieses Kodestück tatsächlich als unbekannt/ungültig kennzeichnet.
-
Eventuell ist ja der if()-Block vom Präprozessor komplett leergeräumt worden (welchen Inhalt hat 'irgendwas'?) - und dann war dein Compiler so "freundlich", das zugehörige if() rauszuoptimieren.
(wenn du dich etwas mit Assembler auskennst, kannst du im Debugger mal auf die Disassambler-Anzeige wechseln und nachsehen, was von dem if() geblieben ist)
-
Probier doch einfach folgendes:
if (b) { __asm int 3; #if irgendwas == 0 // ... #endif }
-
Hi
Wieso sollte der Compiler eigentlich eine lehre if Anweisung übersetzen, wenn im Argument der Anweisung nur eine Variable agbeprüft wird? Die Anweisung verändert die verwendete Variable nicht, auserdem wird sonst ja nichts gemacht, also kann es ohne Probleme weggelassen werden. Ggf ist das ein problem mit dem optimierungslevel. Oder schalt mal beim debugen den asm code mit ein, dann siehst du auch, was der compiler wirklich erzeugt hat.
gruss
-
Im Debugmodus sind die Optimierungen bei VC++ standardmäßig ausgeschaltet, also wird eigentlich nichts weggelassen.
-
electron schrieb:
@Sgt.Nukem: Sorry, aber der Titel trifft es ziemlich gut.
Dein Problem ist: Visual Studio 6.0 -- Beim Einzelschritt-Debuggen wird der Code mit dem Breakpoint einfach übersprungen.
Deine Beschreibung ist: Ich sehe Code wo keiner ist...Wie gesagt, setze in Dein leeres NUTZLOSES if() ein printf(""); rein und direkt vor diesem den Breakpoint.
Z.B.
EDIT: Natürlich muß die if-Bedingung true ergeben...