ID Error

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Hallo zusammen

      Ich habe hier ein kleines (?) Problem. Selten stürzt meine Mod ab und es kommt im debug-modus diese Meldung:

      [cpp][4ef4dtof7][assert]: src/engine/server/server.cpp(117): id errorProgram received Signal SIGSEGV, Segmentation fault [Switching to Thread 0xf75106c0 (LUP 21044)] 0x0S065fe2 in dtog_tareak () at src/taase/system.c:85 85 *((unsigned*)0) = 0x0;Current language: auto; currently c[/cpp]

      Ich nehme jetzt mal an, da server.cpp line 117 NewId ist, dass der Fehler was mit snap zu tun hat, beziehungsweise mit snap bei neuen Entitys.



      [cpp]int CSnapIDPool::NewID()
      {
      int64 Now = time_get();
      // process timed ids
      while(m_FirstTimed != -1 && m_aIDs[m_FirstTimed].m_Timeout < Now)
      RemoveFirstTimeout();
      int ID = m_FirstFree;
      dbg_assert(ID != -1, "id error"); <------------------------------------------------117
      if(ID == -1)
      return ID;
      m_FirstFree = m_aIDs[m_FirstFree].m_Next;
      m_aIDs[ID].m_State = 1;
      m_Usage++;
      m_InUsage++;
      return ID;
      }[/cpp]

      Meine Frage ist nun, wie kann so ein Bug entstehen? Hatte jemand zufällig schon mal diesen Error? Der Bug tritt immer erst nach einer gewissen Zeit auf.

      Vielen Dank schonmal.

      Grüsse
      FunElefant
    • Eine snapid für graphische elemente, welche vom server zum clientgesendet wird, hatte den wert -1.
      Du musst rausfinden wie das zustande kam und was du verändert hattest am server.
      Die ID wird durch m_FirstFree hervorgerufen (die erstbeste id, welche frei ist.)
      Wenn KEINE frei ist, dann wird glaube -1 ausgegeben. Dann müsstest du viel zu viele ids erstellt haben.
      Ohne genaurere informationen kann ich nur weiter rumspekulieren, wie zuvor.
    • Ich danke euch schon mal für die Hilfe mit dem ID-Problem. Dank euch konnte ich den Error beheben.
      Nun plagt mich aber noch ein Crashgrund, der immer wieder mal auftaucht. Ich versuchte die Lösung selber zu finden, aber ich fand den Auslöser nicht.

      Die Mod crasht öfters an dieser Stelle:

      Quellcode

      1. src/game/server/gameworld.h:41 class CGameContext *GameServer() { return m_pGameServer; }



      Aus meiner Amateursicht bedeutet das, dass er nicht mehr zum m_pGamerServer zurückkehren konnte.
      Wann ist das der Fall? Ist m_pGamerServer nicht immer? Man kann ja den Befehl GameServer()-> auch nicht jedesmal abfragen, da der so oft vorkommt.

      Da ich nicht genau weiss, wenn das der Fall ist, weiss ich auch nicht, wo ich suchen muss. Natürlich könnte ich die seltenen Abstürze mit einem Restartscript problemlos umgehen, trotzdem hätte ich gerne eine "stabile" Mod.

      Wenn ihr mir Tipps geben könntet, wäre ich sehr dankbar.

      Grüsse
      FuN~EleFaNt
    • Danke erstmal Sushi für deine Antwort.
      Du hast ja geschrieben, dass ich warscheinlich GameServer() an einer falschen Stelle aufrufe. Ich habe jetzt nochmal meine ganze Mod durchsucht, und nichts gefunden, wo ich das Gefühl habe, dass GameServer() da nicht hingehört.
      Ich habe, da ich nicht so vertraut mit programmieren bin, nur Dinge an der Source verändert, die ich eigentlich kenne.
      Im Grundsatz hab ich diese Files verändert:

      kleine Änderungen in:
      -mapitems
      -collision
      -gamecore
      -gameworld
      -player
      -gamecontext
      -gamecontroller

      und hauptsächlich den ganzen Entities-Ordner

      Da sollte m_pGameServer doch immer initialisiert sein? Der Befehl GameServer() wird jedenfalls so gut wie immer dort auch benutzt, wo ich was verändert habe.


      Ich hoffe, jemand hat noch eine Idee zu meinem Problem.
      Vielen Dank.
    • Debug habe ich schon gemacht. Wenn ich auf meinem V-Server einen Debug mache (über PUTTY und gdb), kommt einfach die Zeile, die ich oben geschrieben habe, also return m_pGameServer.
      Das Problem ist, dass wenn ich auf meinem Rechner mit Visual C++ debugge, er bei diesem Fehler keine Quelle findet, da kommen dann nur Werte, mit denen ich nichts anfangen kann. Bei anderen Abstürzen findet er aber die Quelle problemlos.
      Ich versuche heute abend mal noch ein anderes Debug-Programm aus, vielleicht spuckt das ja mehr aus :))
    • Ja, also ich habe jetzt öfters den Debug gemacht. Der Fehler tritt bei character.cpp in Tick() auf. Das Problem ist aber, dass es nicht an einem Command liegt, sondern dass es einfach eine Stelle ist. Ich kann den Command, bei dem er gecrasht is (zum Beispiel Server()->TickSpeed(), da stürzt er ab weil er nicht zu Server() zurückkehren kann) nach unten verschieben, dann crasht es beim nächsten mal einfach beim nächsten Command wo GameServer() oder Server() vorkommt. Es ist bestimmt kein fehlerhafter Befehl, denn die Befehle in Tick() werden sozusagen immer ausgeführt. Mir scheint es, als würde es einfach nach einer gewissen Zeit stoppen. Es tritt auch meistens so ca. nach 1-2 Stunden auf mit fast vollem Server.

      Ich weiss echt nichtmehr weiter, mir scheint als müsste ich mich wohl oder übel mit dem Error abfinden.

      Kann es sein dass eine Mod zu gross ist? Battle is ja eine sehr umfangreiche Mod.

      Wenn jemanden noch zufällig was einfallen würde, kann er sich ja melden.

      Vielen Dank für eure Hilfe.

      Gruss FuN~EleFaNt
    • Ja ich habs langsam begriffen^^

      Das Problem ist, dass ich nie vor hatte, jemandem die Source zu zeigen. Daher hab ich mir auch überhapt keine Mühe gegeben bei der Darstellung und bei der Verständlichkeit der Source. Da die Source auch noch recht umfangreich ist, kann im Moment warscheinlich nur ich sie verstehen. Dazu kommt, dass ich nie programmieren gelernt habe, und daher einige Schritte warscheinlich sehr amateurhaft erscheinen werden.

      Ich bin grad dabei die Source etwas zu bereinigen und kontaktiere dann denjenigen per PN, falls ich bis da den Fehler nicht schon selbst gefunden hab.

      Vielen Dank für die Rückmeldungen.
      Gruss FuN~EleFaNT

      /edit
      Problem gelöst. Das Problem lag wohl an den Broadcasts. Ich glaube es waren in seltenen Situationen zuviele auf einmal. Jedenfalls läuft jetzt die Mod stable.
      Danke für eure Hilfe.

      /edit2
      Noch kurz zum ID-Error falls es jemand interessiert:
      Ich hatte mehrere entities erstellt, in denen ich mehr als ein Objekt darstellen lies, also neue Snap-ID's erstellte. Standardmässig wird aber nur immer m_ID zurückgesetzt nach dem zerstören des objekts. Alle anderen, neu erstellent ID's blieben bestehen. Und so häufte sich mit der Zeit die Anzahl verwendeter ID's an und erreichte den maximalwert und dann entstand der Error.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von FuN~EleFanT ()