|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
piv0 Mini JLI'ler
Anmeldedatum: 04.11.2006 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 09.04.2007, 12:44 Titel: Release Build, Error <--> Debug, funzt |
|
|
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
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 |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 09.04.2007, 13:55 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.04.2007, 14:34 Titel: |
|
|
Vielleicht kann dir dieser FAQ Eintrag weiter helfen
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 _________________ 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 |
|
|
piv0 Mini JLI'ler
Anmeldedatum: 04.11.2006 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 09.04.2007, 22:16 Titel: |
|
|
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 |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 09.04.2007, 22:52 Titel: |
|
|
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 |
|
|
|
|
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
|