Programm läuft beim Debuggen durch, hängt sich beim normalen Ausführen aber auf
-
Hi liebe Forengemeinde;
Noch ein paar Infos:
- Ich benutze visual studio 2010
- Das Programm macht beim Schritt-für-Schritt debuggen was es soll
- Das (Konsolen)Programm stürzt bei normaler Ausführung ab mit der Windowsmeldung "XXX.exe funktioniert nicht mehr"
- In der anscheinend kritischen Zeile (?) steht eine einfache Ausgabe
- manchmal Erfolgt der Absturz schon vor dieser Zeite (Durch Zwischenausgabe getestet)
Da ich ein ziemlicher Neuling bin, sehe ich diesen Fahler zu ersten mal und habe keinen Schimmer woran das Programm scheitert. Bitte um Fehlereingrenzungen.
Gruß, Mic
-
Ganz ohne deinen Code zu sehen würde ich mal sagen: Du hast einen Fehler gemacht.
Aber ob dir das weiterhilft?...
-
Was genau meinst Du mit
Mic123 schrieb:
- Das (Konsolen)Programm stürzt bei normaler Ausführung ab mit der Windowsmeldung "XXX.exe funktioniert nicht mehr"
Ist es dort im Debug-Modus kompiliert oder im Release Mode?
Letzteren kann man ebenfalls mit Debug-Informationen compilieren und kommt dann schnell z.B. nicht initialisierten Variablen auf die Spur...
-
Zum Absturz führt:
in visual studio: Debuggen -> starten ohne Debugging,
Es läuft durch:
Debuggen -> Debugging starten
-
Ich bin auf der Suche nach generellen Hinweisen, was so einen Fehler verursachen kann. Nicht initialisierte Variablen ist ja schonmal so ein Hinweis. Meinen ganzen code danach durchgehen mach ich dann schon selber...;-)
-
Typischerweise wird das dadurch verursacht, dass du versuchst, auf Speicher zuzugreifen, der dir nicht gehört. Ursache ist, wenn du einen falsch oder gar nicht initialisierten Pointer dereferenzierst oder über die Grenzen eines Containers zugreifst. Dies hat aber oftmals nicht unmittelbare Gründe, sondern die eigentliche Ursache liegt oftmals anderswo. Etwa dadurch, dass ein Index nicht initialisiert wird und du den später auf einen Container loslässt.
Aber es gibt da viel bessere Möglichkeiten als den ganzen Code manuell durchzugehen. Unter Linux würde ich mal valgrind drauf loslassen, gegen die Debuglaufzeitumgebung linken oder mir mal ein Coredump des abgestürzten Programmes in den Debugger laden. In Visual Studio gibt es bestimmt ähnlich mächtige Werkzeuge, es hat einen recht guten Ruf als Entwicklungsumgebung.
-
Vielen Dank soweit. Ich denke das ist eine gute Gelegenheit mich mit advanced dubugging zu beschäftigen. Das gute ist, ich habe eine routine, die fast genau das selbe macht und nicht zum Absturz führt. Dadurch lässt sich die Ursache hoffentlich leichter eingrenzen.
Aus Interesse: Woran liegt das denn, dass ihn die Speicherverletzung im debugging modus nicht stört? Alle Variablen, die ich im Zuge meines Programmes ausgeben lassen weisen auch die korrekten Werte auf, so dass beim Schritt für Schritt debuggen alles richtig aussieht...
-
Ich hab den Fehler!
Es wurde (wie vermutet) auf ein bereits gelöschtes Objekt zugegriffen. Bleibt für mich die Frage, wieso visual studio damit im debugging-modus kein Problem hatte...
-
Hier kann man einfach sagen, dass dein Orginalcode undefiniertes Verhalten erzeugt hat. Undefiniert kann eben auch bedeuten das Alles funktioniert.
-
Mic123 schrieb:
Bleibt für mich die Frage, wieso visual studio damit im debugging-modus kein Problem hatte...
Wenn ich raten müsste, würde ich sagen, daß der Debugger in die Speicherverwaltung eingegriffen hat und dadurch deine fehlgeleiteten Zugriffe in Bereichen gelandet sind, die nicht verwendet wurden - ohne Debugger wurde der Speicher anders verteilt und du hast wichtige Informationen zerstört.