Und wie kann ich die Ursache zuordnen? Kann ich zu dieser Zeile springen?
Und wie kann ich die Ursache zuordnen? Kann ich zu dieser Zeile springen?
Die Aufrufliste ist wirklich nur so kurz?
Ich raffe erst jetzt das Problem.
Starte noch mal komplett neu! Gehe bei der ersten Meldung auf Debug und unterbrechen! Das andere sind Folgefehler. Poste dann den Stack.Die erste kam einmal, die zweite schon ziemlich oft. Wie kann man da jetzt die Ursache finden?
Das zusammengesetzte Bild hat mir was anderes suggeriert. edit: (Das sah so aus, als hättest du die SChritte von oben schon gemacht. Du hast aber erstmal auf Weiter geklickt und das war schon der Fehler! Wir sind jetzt in einer anderen Stelle im Code und nicht mehr an der Fehlerstelle Nummer 1.)
Geändert von rucivfan (07. Juli 2013 um 14:57 Uhr)
Der erste Fehler beim Neustart (ich hatte zwischendurch noch ein paar XML-Fehler korrigiert, die ich durch den Debugger erkennen konnte):
Und das ist der "Stack"Assert Failed
File: CvInfos.cpp
Line: 4789
Expression: (iNumSibs <= GC.getNUM_UNIT_AND_TECH_PREREQS())
Message: There are more siblings than memory allocated for them in SetGlobalUnitInfo
> CvGameCoreDLL.dll!CvUnitInfo::read(CvXMLLoadUtility * pXML) Zeile 4789 + 0x44 Bytes C++
CvGameCoreDLL.dll!CvXMLLoadUtility::SetGlobalClassInfo<CvUnitInfo>() Zeile 1322 + 0x17 Bytes C++
CvGameCoreDLL.dll!CvXMLLoadUtility::LoadGlobalClassInfo<CvUnitInfo>() Zeile 1457 C++
CvGameCoreDLL.dll!CvXMLLoadUtility::LoadPreMenuGlobals() Zeile 667 C++
Civ4BeyondSword.exe!0041394d()
[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für Civ4BeyondSword.exe]
Civ4BeyondSword.exe!00a3fd0b()
Civ4BeyondSword.exe!0040ce45()
kernel32.dll!75f014dd()
msvcr71.dll!7c34218a()
ntdll.dll!77c39ec5()
Civ4BeyondSword.exe!00790074()
Civ4BeyondSword.exe!00790074()
Civ4BeyondSword.exe!0078006f()
Civ4BeyondSword.exe!0078006f()
Civ4BeyondSword.exe!0078006f()
Civ4BeyondSword.exe!0078006f()
Civ4BeyondSword.exe!0064006e()
Civ4BeyondSword.exe!0064006e()
Civ4BeyondSword.exe!0069006c()
Civ4BeyondSword.exe!0064006e()
Civ4BeyondSword.exe!0064005f()
Civ4BeyondSword.exe!0064005f()
Civ4BeyondSword.exe!0075006c()
Civ4BeyondSword.exe!0075006c()
Civ4BeyondSword.exe!0075006c()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0073005f()
Civ4BeyondSword.exe!0073005f()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064002e()
Civ4BeyondSword.exe!0064006e()
Civ4BeyondSword.exe!0064006e()
Civ4BeyondSword.exe!0064006e()
Civ4BeyondSword.exe!0064006e()
Wenn man im Stack auf einen Eintrag klickt, springst man zu der Codezeile. Kannst du in der obersten Codezeile klicken und bitte den Wert von iNumSibs lesen in dem du darüber mit der Maus gehst?
edit: verständlicher formuliert.
edit2:
Weiter oben steht folgendes im Code:
szTextVal enthält den entsprechenden Klassen-Eintrag aus der UnitInfo. Gehe wie bei iNumSibs darüber und du findest die entsprechende Einheitenklasse.Code:pXML->GetChildXmlValByName(szTextVal, "Class"); m_iUnitClassType = pXML->FindInInfoClass(szTextVal);
Geändert von rucivfan (07. Juli 2013 um 15:12 Uhr)
Das ist die Codezeile, zu der er springt:
Der Wert ist 4. Das ist auch exakt der Wert aus der GlobalDefines.xml für die Maximale Anzahl der Unit-Tech-And-Prereqs.PHP-Code:
FAssertMsg((iNumSibs <= GC.getNUM_UNIT_AND_TECH_PREREQS()) ,"There are more siblings than memory allocated for them in SetGlobalUnitInfo");
Was meinst du damit? Die Länge des Strings oder die Anzahl der And-Bedinungen?
Unter szTextVal steht "TECH_WERKSTOFFKUNDE"
Edit: ich habe auch geirrt. Der Wert in der GlobalDefines.xml ist 3.
Mein Fehler, die VAriabel wird jedes mal neu beschrieben. Dort steht jetzt die Techbedingung drinn.
schaue in m_iUnitClassType. Das ist aber leider nur die Zahl. Das abzuzählen wird schwer.
Ich denke, ich habe die Einheit gefunden, die zu viele Prereqs hatte, ironischerweise eine EInheit mit "NONE"-Eintrag. Muss ich jetzt, nachdem ich die XML geändert habe, neu starten, oder kann ich fortsetzen?
Neustarten ist immer besser, aber hier sollte es noch keine Probleme machen, denke ich. Problematisch wird es, wenn das Ergebnis total falsche Folgefehler verursachen kann.
XML-Daten werden nur beim Programmstart gelesen. Python-Daten kannst du während des Programmlaufes ändern, wobei es in seltenen Fällen Probleme gibt, wenn zwischendurch ein Python-Fehler auftrat.