Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

271

21.04.2008, 22:46

An eine Art Strudel hab ich auch schon gedacht. Das könnt ich aber auch mal selber probieren;) Schaut mal in die Datei data/shader/BlackHole.cg (ja, ich benutze dafür cg shader:))

@raXor
Als das Spiel abstürzte, kam dann eine Meldung, dass eine Dumpdatei generiert wurde? Mit der Datei müsste ich den Fehler recht einfach finden können. Mit 10 Gegnern dürfte das Spiel ja eigentlich klar kommen müssen...

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

272

22.04.2008, 17:40

Zitat

Rocket Rage ist leider abgestürzt (Hardwareexcepion: ACCES_VIOLATION)

Eine Dunpdatei wurde gespeichert.
Sende bitte die Datei an x@x.de.


Zur Dumpdatei

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

273

24.04.2008, 11:40

Hm, hilft wohl doch nicht. An der markierten Stelle zeigt die Dumpdatei eine AccessViolation (Zeiger 0 derefenziert) an:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void GameObject::setCategoryBits( unsigned long categoryBits )
{
    if( this->categoryBits == categoryBits ) return;

    this->categoryBits = categoryBits;

    // die neuen Bits für alle bereits bestehenden Shapes setzen

    for( std::list<dGeomID>::iterator it = geoms.begin(); // hier Access Violation

         it != geoms.end();
         it++ )
    {
        dGeomSetCategoryBits( *it, categoryBits );
    }
}

this muss ungleich 0 sein und geoms.begin() dürfte sowas eigentlich nicht verursachen.

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

274

24.04.2008, 15:54

Ein Access Violation kann nach meiner Erfahrung auch erst weit hinter dem eigentlichen Verursacher entdeckt werden. Zumindest meine ich das Problem schonmal gehabt zu haben. This ist ganz sicher != null? Handelt es sich dabei um eine Debugversion, sprich mit einer DebugRuntime gelinkte Version?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

275

24.04.2008, 22:31

this muss gültig sein, da es schon in den ersten beiden Anweisungen benutzt wurde und auch schon vor dem Methodenaufruf einige Sachen mit dem Objekt gemacht wurden (aus dem callstack ersichtlich).
Debugversion ist es nicht, die ist aber auch ziemlich langsam, mit der macht das nicht wirklich Spaß. Glaube aber auch nicht, dass David mit der getestet hat, beim ersten Start mit der Debugversion sind gleich ein paar Asserts und Runtimechecks fehlgeschlagen;) (die auch Bugs sichtbar gemacht haben)

Allerdings hab ich die Releaseversion mit Debuginformationen kompiliert, die Dumps müssten also eigentlich funktionieren.

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

276

24.04.2008, 23:05

Welche Infos packt er denn in die Dump (also welche Flags sind gesetzt) und womit wird der Dump überhaupt erstellt? Mehrere Threads sind aber nicht beteiltig, oder? Weil dann wirds nach meiner Erfahrung echt hässlich :badgrin:
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

277

24.04.2008, 23:37

Nein, mehrere Threads glücklicherweise nicht (zumindest keine eigene, diverse Libs und andere Programme nehmen sich ja gern die Freiheit)

Ansonsten nehm ich dafür MiniDumpWriteDump mit MiniDumpWithDataSegs. Hier der ganze Code dazu:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
LONG WINAPI expFilter( EXCEPTION_POINTERS* p_exception,
                       DWORD exceptionCode )
{
#ifdef _DEBUG
    if(IsDebuggerPresent())
        return EXCEPTION_CONTINUE_SEARCH; //Dem Debugger die Exception überreichen

#endif



    char buffer1[1024];

    if( !g_MiniDumpWriteDump )
        sprintf_s( buffer1, 1024, "Rocket Rage ist leider abgestürzt. (Hardwareexception: %s)\n\n"
                                  "Es konnte keine Dumpdatei gespeichert werden, da \"Dbghelp.dll\" nicht gefunden wurde.\n",
                                  GetExceptionCodeString( exceptionCode ) );
    else
    {
        GetModuleFileNameA( 0, buffer1, 1024 );

        SYSTEMTIME stLocalTime;
        GetLocalTime( &stLocalTime );
        char buffer2[1024];
        HANDLE hDumpFile;
        for( int i = 0; i < 2; i++ )
        {
            sprintf_s( buffer2, 1024, "%s %04d-%02d-%02d %02d-%02d-%02d pid%ld tid%ld v%s.dmp",
                       buffer1,
                       stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay, 
                       stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond, 
                       GetCurrentProcessId(), GetCurrentThreadId(), strVersion );

            hDumpFile = CreateFileA( buffer2, GENERIC_READ | GENERIC_WRITE,
                                     FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0 );
            if( hDumpFile != INVALID_HANDLE_VALUE )
                break;
            // Dumpfile konnte nicht im eigenen Verzeichnis gespeichert werden

            GetTempPathA( 1024, buffer1 );
            strcat_s( buffer1, 1024, "RocketRage.exe" );
            // Also probieren wirs noch im Temporären

        }

        if( hDumpFile != INVALID_HANDLE_VALUE )
        {
            MINIDUMP_EXCEPTION_INFORMATION expParam;
            expParam.ThreadId = GetCurrentThreadId();
            expParam.ExceptionPointers = p_exception;
            expParam.ClientPointers = TRUE;

            BOOL r = g_MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
                                  hDumpFile, MiniDumpWithDataSegs, &expParam, 0, 0);

            if(r)
                sprintf_s( buffer1, 1024, "Rocket Rage ist leider abgestürzt. (Hardwareexception: %s)\n\n"
                           "Eine Dumpdatei ist unter \"%s\" gespeichert worden.\n"
                           "Sende bitte die Dumpdatei mit Beschreibung und Betriebssystemversion an BlabReject@web.de.",
                           GetExceptionCodeString( exceptionCode ), buffer2 );
            else
                sprintf_s( buffer1, 1024, "Rocket Rage ist leider abgestürzt. (Hardwareexception: %s)\n"
                           "Es konnte keine Dumpdatei gespeichert werden (Fehlercode %i).\n\n"
                           "Wende dich bitte an BlabReject@web.de.",
                           GetExceptionCodeString( exceptionCode ), GetLastError() );
            CloseHandle(hDumpFile);
        }
        else
        {
            sprintf_s( buffer1, 1024, "Rocket Rage ist leider abgestürzt. (Hardwareexception: %s)\n\n"
                                      "Es konnte keine Dumpdatei gespeichert werden, da die Datei\n"
                                      "\"%s\"\n"
                                      "nicht geöffnet werden konnte (Fehlercode %i).",
                                      GetExceptionCodeString( exceptionCode ), buffer2, GetLastError() );
        }
    }

    std::cout << "Writing crash information to \"crash.txt\" ..." << std::endl;

    crashLog.open( "crash.txt" );
    crashLog << "**************************************************" << std::endl;
    crashLog << "An exception was thrown!" << std::endl;
    crashLog << "Exception code: " << exceptionCode << std::endl;
    crashLog << "Printing stack trace ..." << std::endl;
    crashLog << "**************************************************" << std::endl << std::endl;

    MyStackWalker sw;
    sw.ShowCallstack( GetCurrentThread(), p_exception->ContextRecord );

    crashLog.close();

    ShowCursor( true );
    MessageBoxA( 0, buffer1, "Rocket Rage - Hardware Exception", MB_ICONERROR | MB_TOPMOST | MB_SETFOREGROUND );
    ShowCursor( false );

    return EXCEPTION_EXECUTE_HANDLER;
}


Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

278

25.04.2008, 15:33

Dann scheiden die meisten gemeinen Fehlerquellen aus und der Flag bietet genug Infos. Wenn das Spiel bei razor immer abschmiert, könntest du ihm doch eine Version mit entsprechender DebugRuntime geben. Ansonsten würde ich an deiner Stelle mal den Callstack genau anschauen. Vorallem die ganzen Zeiger (auch this Zeiger) auf den Weg bis zum Absturz.
Mehr Ideen, wie man dem Problem zu Leibe rücken kann, habe ich dann aber auch nicht.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

279

25.04.2008, 22:24

Naja, lasst uns mal lieber überlegen, was man noch an Rocket Rage verbessern kann. Ich denke ja ein wenig an einen Multiplayermodus. Was würdet ihr da gameplaymäßig vorschlagen?
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

280

27.04.2008, 14:17

Mal ne Frage:
Ist das bei euch nicht so?
Erstellt doch mal 20 Gegner bei euch... mich würde interessieren was bei euch dann passiert...

Werbeanzeige