JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Debug Version läuft, Release stürtzt immer ab
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 12:27    Titel: Debug Version läuft, Release stürtzt immer ab Antworten mit Zitat

Ich wollte eigentlich mal unser neues Projekt vorstellen, aber die Release Versions stürtzt immer ab. Die Debugversion läuft hingegen fehlerfrei. Weiß jemand woran das liegen kann?
Ich hab versucht die Releaseversion zu Debugfeen, bekommen den Fehler "Acces Violation", aber anders als in der Debugversion wird nicht der Quellcode sondern:
Code:

0040405A   nop
0040405B   nop
0040405C   nop
0040405D   nop
0040405E   nop
0040405F   nop
00404060   mov         cl,byte ptr ds:[4717E0h]
00404066   mov         al,1
00404068   test        al,cl
0040406D   enter       0D88h,0E0h
00404071   pop         ss
00404072   inc         edi
00404073   add         cl,ch
00404075   pop         es
00404076   add         byte ptr [eax],al

angezeigt. (Ist nur ein kleiner Auszug, der Fehler tritt in der Reihe mit dem "test" auf).
Gibt es jettz irgendeine Möglichkeit, den Fehler zu beheben? Was kann den in der Debugversion anders sein? Beide lassen sich ohne Fehler und Warnungen kompilieren. Der einzige unterscheid: Dbug läuft perfekt, Release stürtzt sofort nach dem Start ab.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 13:22    Titel: Antworten mit Zitat

In der Releaseverson alle Variablen initialisieren (Debug sind alle globalen auf 0 gesetzt)
Ansonsten ist die Debug Runtime auch "genädiger" wenn du Speicher überschreibst. Kannst mal Memory Check aktivieren, dann bekommst du die Fehler auch. Mit der DX Debug Runtime testest du ja bestimmt sowieso, oder?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 14:35    Titel: Antworten mit Zitat

Ich hab jetzt mal mittels Errorlogfunktion die Funktion in der er Abstürtzt gefunden:
Code:

void CBlocks::LoadBlocks(int NumBlocks)
{
   m_BlockInfo=new BlockTyp[NumBlocks];
   char cBlockname[8];
   //Alle Blockinformationen aus der ini-Datei laden
   for(int i=0; i<NumBlocks; i++)
   {
                                Error("test");
      sprintf(cBlockname, "Block%d", i);
      m_BlockInfo[i].Hitpoints=ReadINIfloat(cBlockname, "Hitpoints");
      m_BlockInfo[i].Size.x=ReadINIfloat(cBlockname, "SizeX");
      m_BlockInfo[i].Size.y=ReadINIfloat(cBlockname, "SizeY");
      m_BlockInfo[i].Size.z=ReadINIfloat(cBlockname, "SizeZ");
      m_BlockInfo[i].Typ=i;
   }
}

Was komisch ist: Wenn ich den Erroraufruf weglassen (auskommentire oder lösche) stürtzt er ab. Wenn ich ihn aber wie oben schreiben funktioniert es. Die Debugversion funktioniert immer, das problem ist nur bei der Release.
Die Errorfunktion macht nichts weiter als den übergebenen String in ne Datei zu schreiben. Ich hb auch schon die Projektdateien gelöscht und neu erstellt, weil ich dacht Vc hätte wieder mal einen Fehler.
Es ist mir absolut unerklärlich, warum ich den Erroraufruf nicht weglassen kann. Den Die Releaseversion soll ja nicht andauernd ne Errodatei erstellen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 15:45    Titel: Antworten mit Zitat

Sowas ist typisch, wenn du Speichergrenzen überschreibst. NumBlocks kann definitiv nicht größer als 2 Stellen werden, usw.?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 16:25    Titel: Antworten mit Zitat

Im Moment ist es immer NumBlocks immer auf 2. Aber wieso sollte es funktionieren wenn ich die ErrorFunktion jdesmal Aufrufe? Die kann doch den Rest der Schleife nicht beeinflussen. Ich hab den AUfruf auch mal an andere Stellen in die Schleife geschrieben, es funktioniert, solange ich sie irgendwo in der Schleife aufrufe. Aus Sicherheitsgründen hab ich auch mal den Speicher für cBlockname auf 16 erhöht. Bringt aber alles nix.
Kann es sein das das ein Bug in VC++ ist?
Achja: Wie stell ich den MemoryCheck ein? Vieleicht find ich den Fehler ja damit. Und das mit der DX Debug Runtime, weiß ich nicht so genau. Wo stellt man das den ein?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 16:31    Titel: Antworten mit Zitat

Visual C++ hat bestimmt keinen Bug Wink

Die DX-Debug Runtime stellst du unter Systemsteuerung -> DirectX -> Direct3D Reiter, dann Debug ein. 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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 16:40    Titel: Antworten mit Zitat

Das sollte in die FAQ.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 21:12    Titel: Antworten mit Zitat

Ich finde bei mir unter Systemsteurung kein DirectX Eintrag (WinXP)
Hab erst alle Katewgorien durchsucht und dann auf "zur klassischen Ansicht wechseln" geklickt, da ist kein DirectX Einteag. Hab ichs vieleicht flasch installiert?
MemoryCheck hab ich wie beschrieben aktiviert, aber ich merke keinen Unterschied. Kommt keine Fehlermeldung oder so.
Da seltsame ist, das wenns im Fullscreen läuft es sofort kommentarlos beendet. Wenn Ichs im Fenstermodus staarte, kommt noch die Fehlermeldung und ich kann auf Debug klicken. Aber seltsamemrweise zeigt er mir immer ne andere Adresse (Zeile) an. Und aus diesen Millionen Einträgen kann man ja auch nicht so recht schlau werden.
Aber wie kann es nur sein, das der ErrorAufruf entscheident ist, obs funktioniert oder nicht?Das passt mir nicht in die Logig. Das kann doch überhaupt nicht sein!
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 21:16    Titel: Antworten mit Zitat

Hast du bei der DX Installation die Debug-Runtime mitinstalliert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 21:21    Titel: Antworten mit Zitat

Ich glaub schon. Aber ich installiers am besten noch mal neu.
Nur: Wenn ich jetzt weiß, das es genau in der Schleife abstürtzt, und in der Schleife nix von DirectX ist, kann mir das dann überhaupt bei diesem problem weiterhelfen?Ich meine, das ist doch eher ein allgemeines Problem und hat nix mit DirectX zu tun.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 21:24    Titel: Antworten mit Zitat

Ja, ich denke immer noch, dass es ein Speicherproblem ist, in der Ausgabe steht tatsächlich nichts (im Debugmodus)?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 22:23    Titel: Antworten mit Zitat

Also ich hab auf Ausführen (F5) geklickt und damit die Debugversion gestartet. Lief wunderbar, hab sie beendet. Unten in dem Fenster (neben Erstellen) tand bei Debug:

Code:

ntdll.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\kernel32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\d3d9.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\d3d8thk.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\gdi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\user32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\advapi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\rpcrt4.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\msvcrt.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\version.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\winmm.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\dinput8.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
Geladene Symbole für "C:\WINDOWS\system32\Syncor11.dll"
"C:\WINDOWS\system32\uxtheme.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\hid.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\setupapi.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\ntmarta.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\wldap32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\ole32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
"C:\WINDOWS\system32\samlib.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
Thread 0x6E4 wurde mit Code 0 (0x0) beendet.
Thread 0x4C8 wurde mit Code 0 (0x0) beendet.
Das Programm "D:\C++\4Pong\Debug\4Pong.exe" wurde mit  Code 0 (0x0) beendet.

Ich hab mal Testweise den Erroraufruf durch die den Aufruf von TestFile() ersetzt. Die Funktion prüft ob eine Datei existiert, indem sie versucht sie zu öffnen. Damit hats auch funktioniert. Wenn ich aber statt TestFile ne andere globale Funktion aufrufe, gehts wieder nicht! Diese andere Funktion hieß Zahl() und macht aus nem charArray eine int-V. Die ersten beiden Funktionen öffneten jeweils ne Datei, aber daran kanns doch nicht liegen, oder?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 22:25    Titel: Antworten mit Zitat

Kannst du das Problem isolieren? Du kannst mir den Code auch mal schicken, ich kann es mir mal angucken.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.06.2004, 22:35    Titel: Antworten mit Zitat

Angesichts dieser langen Diskussion glaub ich kaum das wir das Problem hier im Forum so schnell lösen können. Wäre echt net, wenn du dir das mal anschauen würdest. Aber ich warne dich: Wenn du deinen Namen drunter schreibts und den Source weiterfverkaufst, kauf ich nie wieder ein Buch von dir!
Du müsstest mir nur deine E-Mail verraten, aus dem Forum heraus kann ich ja keine Daten anhängen. (Schreibt ne PN falls du die nicht allen verraten willst)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 07.06.2004, 19:55    Titel: Antworten mit Zitat

versuchsmal mit CodeOptimierungen aus stellen bei SDL programmen wirkt das Wunder!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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