JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=bf841bfe1c36f3bbcfe0aabc9afad8cbMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Release Build, Error <--> Debug, funzt

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
piv0
Mini JLI'ler



Anmeldedatum: 04.11.2006
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 09.04.2007, 13:44    Titel: Release Build, Error <--> Debug, funzt Antworten mit Zitat

Hi,
Ich habe das Problem, dass mein Release Build sofort nach dem Starten abstürzt, meine Debug funktioniert einwandfrei..
Beim Release wird sofort eine Access Violation erzeugt/begangen, wahrscheinlich durch fehlerhafte Speichernutzung oder ähnliches.

Zum einen kann ich beim Debug build folgendes rauslesen:
Code:

"ntdll.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
...
... bla bla viele dll..
...
"C:\WINDOWS\system32\oleaut32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
Detected memory leaks!
Dumping objects ->
{4172} normal block at 0x00B21180, 32 bytes long.
 Data: <  X      D      > 84 EA 58 00 01 00 00 00 C0 44 16 00 00 00 00 00
Object dump complete.
Thread 0xBC8 wurde mit Code 0 (0x0) beendet.
Das Programm "C:\Programme\Microsoft Visual Studio\MyProjects\Schach beta\Debug\Schach beta.exe" wurde mit  Code 0 (0x0) beendet.


So.. sind eigentlich die Symbolinformationsfehler relevant? Was passiert denn wenn keine Symbolinformationen vorhanden sind?

Naja.. gut: das Problem wird angesprochen: "Detected memory leaks!" .. Ja super, danke fürs Gespräch mein lieber Compiler, aber sag mir doch bitte mal wo Smile

Dann kommt "Dumping Objects". Ist das was böses? ein Error?


Kann ich irgendwie feststellen, WO genau in meinem Code der Fehler "Access Violation" erzeugt wird?



Außerdem habe ich ein ähnliches Problem hier im Forum gefunden, nämlich:
http://www.jliforum.de/board/viewtopic.php?t=2324&

darin steht geschrieben:
Christian Rousselle hat Folgendes geschrieben:

...

Memorycheck so:

Code:

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

// ...

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine, int       nCmdShow)
{
    // der Aufruf der folgenden Funktion bewirkt, dass Informationen über
    // Memory-Leaks und Deffekte beim Beenden des Programms ausgegeben werden
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

// ....

}



C.


Wie kann ich denn nun diese Informationen, die mir die Funktion geben soll, ausgeben/einlesen/angucken?


So, das war jetz viel Text! Ich hoffe das stiftet nicht allzuviel Verwirrung.
Ich bin auf jeden Fall für jede Hilfe äußerst dankbar. Es ist wirklich desprimierend, wenn man die ganze Zeit schön an seinem Programm schreibt, froh über jeden kleinen Fortschritt, und dann war alles umsonst weil die Release nicht funktioniert..
Ich hoffe ihr könnt mir helfen die Access Violation zu beseitigen.

Grüße,
piv0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 09.04.2007, 14:55    Titel: Antworten mit Zitat

Lädst du irgendwelche anderen dateien mit relativen Pfadangaben?

meines wissens nach, interpretiert VS im debug-mode die relativen angaben, als im release mode. Bzw. befindet er sich in dem jeweiligen mode in nem anderen verzeichniss.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.04.2007, 15:34    Titel: Antworten mit Zitat

Vielleicht kann dir dieser FAQ Eintrag weiter helfen Wink

Wo genau du eine access violation bekommst, können wir dir schlecht sagen. Du kannst auch mal schauen, ob du an irgendeiner Stelle versuchst, Speicher zweimal freizugeben. Sowas lässt sich verhindern, indem du Zeiger nach dem Freigeben des Speichers auf 0 stellst und vor jedem Freigeben überprüfst, ob der Zeiger überhaupt noch auf eine gültige Adresse(!=0) zeigt.
Das Problem könnte darin liegen, dass deine Zeiger in der Debugversion initialisiert werden, während sie dies in der Releaseversion nicht werden Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
piv0
Mini JLI'ler



Anmeldedatum: 04.11.2006
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 09.04.2007, 23:16    Titel: Antworten mit Zitat

manu hat Folgendes geschrieben:
Lädst du irgendwelche anderen dateien mit relativen Pfadangaben?

meines wissens nach, interpretiert VS im debug-mode die relativen angaben, als im release mode. Bzw. befindet er sich in dem jeweiligen mode in nem anderen verzeichniss.


Also ich lade ein paar Texturen (Sprites), habe das ganze mit absoluten Pfaden [ c:/.... ] versucht.. funktioniert leider auch nicht..



Dass IHR mir nicht sagen könnt, wo meine Access Violation ist, ist mir klar.. Aber es muss doch einen Weg geben wie ich das feststellen kann, und zwar nicht in dieser Disassemblierten Form beim Debuggen der Release..
Mein Compiler sagt mir doch schon "Detected memory leaks!" (siehe oben), wieso sagt er mir nicht genau wo?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 09.04.2007, 23:52    Titel: Antworten mit Zitat

Der Lord hat es doch schon auf den Punkt gebracht, du nutzt wahrscheinlich in irgendeiner Weise einen Zeiger illegal - eigentlich völlig trivial. Wie sollen wir dir da helfen? Wir wissen weder welche Strategie du zum Memory-Management verwendest, noch haben wir auch noch eine annähernd konkrete Ahnung wie komplex dein Programm ist und wie vertretbar potenzielle Lösungsmöglichkeiten bezüglich Aufwand etc. sind.

Wenn du Sprites lädst, dann riecht es förmlich danach, dass du vorher irgendwelchen Speicher für die Bild-/Meta-Daten nicht reserviert hast... Andererseits, wenn es im Debug funktioniert, liegt meine Vermutung bei Zeiger nicht initialisiert und dann klassisch gegen 0 geprüft und anschließend gelöscht, das kracht dann natürlich, wenn der Zeiger noch ins Datennirwana zeigt. Gib uns am besten den Code, den du für relevant hälst und wir schauen weiter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum