Latest Posts

Topic: Cheat-Codes für Einzelspieler?

Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 1477
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2021-10-03, 17:52

Die Leaks aus SDL und diversen Graphiktreibern sind sämtlich in Third-Party-Bibliotheken auf die wir keinen Einfluss haben. Außerdem tritt manchmal ein größeres Leak aus Eris/persistence.cc (ebenfalls 3rd-Party-Code) auf. Alle drei sind seit Langem bekannt, sind jedoch kein Bug in Widelands sodass wir leider nichts dagegen tun können.
"Echte" Memory Leaks in master sind selten, da ASan das meist bereits während der Entwicklung meldet, aber wenn doch mal eins auftaucht (und nicht nur eine Begleiterscheinung eines anderen Bugs ist1) dann kannst du es gerne melden.


  1. Wenn Widelands mit einem "Unexpected Error During The Game" abstürzt oder der Richtext-Renderer lange Fehlertexte auf die Standardausgabe schreibt, gibt es ebenfalls Memory-Leaks, die man in diesen Fällen allerdings ignorieren kann. 


Top Quote
dr1fter
Avatar
Joined: 2021-09-15, 20:15
Posts: 15
Ranking
Pry about Widelands
Location: Germany
Posted at: 2021-10-03, 21:40

Ja, anhand der Namen, bzw. Dateipfade der fraglichen "Verursacher-Libs" war mir schon klar, dass es sich nicht um unmittelbar aus den widelands-Quellen stammenden Code handelt; gelegentlich werden Bugs indessen ja durch bestimmte Verwendung (die bspw. zum Durchlaufen relevanter Codepfade (ggf. mit schädlichen Argumenten) ausgelöst (wie gesagt: Noobie..).

Wenn speziell diese Speicherlecks (oder was ASan dafür hält - afaik haben solche Werkzeuge ja auch nicht immer Recht..) bereits bekannt sind, gibt es hier vermutlich keinen Grund, das weiterzuverfolgen.

An zwei Stellen sind mir übrigens asserts um die Ohren geflogen:

widelands: /home/dr1fter/src/tmp/widelands/src/graphic/texture.cc:162: virtual Texture::~Texture(): Assertionis_initializer_thread()' failed. Aborted (core dumped) `

dann Folgefehler (nehme ich an), nachdem ich das fragliche assert mit einem try-catch(...) eingeschlossen hatte; ich dachte zumindest, dass das nicht (sofort) fatale Folgen hat, wenn Fehler im Destruktor ignoriert..:

widelands/src/wui/productionsitewindow.cc:284: void ProductionSiteWindow::worker_table_selection_changed(): Assertionworker_type_' failed. Aborted (core dumped) + (nachdem ich das erste assert auskommentiert hatte)widelands/src/wui/productionsitewindow.cc:285: void ProductionSiteWindow::worker_table_selection_changed(): Assertion worker_xp_decrease_' failed. Aborted (core dumped)

Da gehe ich allerdings wirklich mal davon aus, dass das halt ein Entwicklungs-Artefakt ist (trat im Zusammenhang mit der Warenbestandseditierung auf). Mit etwas durchsterben habe ich die Mission dann noch erfolgreich geschafft face-wink.png

Um Missverständnissen vorzubeugen: ich erwarte keinen Support oder Hilfe (für die o.g. Fehler), und mir ist schon klar, dass ich wenn ich will, dass es "einfach nur läuft" halt auf einen freigegebenen Stand zurückgehen, oder selbst fixen muss face-smile.png

Edited: 2021-10-03, 21:41

sapere aude!

user, advocate, and sometimes developer of free (as in freedom) software

Top Quote
dr1fter
Avatar
Joined: 2021-09-15, 20:15
Posts: 15
Ranking
Pry about Widelands
Location: Germany
Posted at: 2021-10-03, 23:02

was mir übrigens gerade noch aufgefallen ist: ich hatte (eben nochmal nachgeschaut) ohne ASan gebaut (./compile.sh -w -s -a -d - eben nochmal in meiner bash-historie nachgeschaut). Insofern hätte ich doch "eigentlich (tm)" garkeine ASan-Fehler bekommen sollen (unabhängig davon, dass das keine relevanten Treffer waren. Ich schaue mal im Generat von CMake nach.. Mag es der ARGV-Parser nicht, dass ich die optionen einzeln angegeben habe?

update: im build.ninja steht:

14824 build src/CMakeFiles/widelands.dir/main.cc.o: CXX_COMPILER__widelands_Debug /home/dr1fter/src/tmp/
      widelands/src/main.cc || cmake_object_order_depends_target_widelands
14825   DEFINES = -DBOOST_ALL_NO_LIB -DBOOST_SYSTEM_DYN_LINK -DBOOST_UNIT_TEST_FRAMEWORK_DYN_LINK -DUSE_
      XDG -DWL_USE_GLVND
14826   DEP_FILE = src/CMakeFiles/widelands.dir/main.cc.o.d
14827   FLAGS = -g  -fext-numeric-literals -std=c++11  -g -DDEBUG -fsanitize=address -fno-omit-frame-poi
      nter -Wredundant-decls -Wall -Wpedantic -Wdeprecated-declarations -Wextra -Wformat -Wformat-nonlit
      eral -Wformat-security -Wformat-y2k -Winit-self -Winvalid-pch -Wlogical-op -Wmissing-include-dirs 
      -Wno-undef -Wold-style-cast -Woverlength-strings -Wpacked -Wpointer-arith -Wsign-promo -Wsync-nand
       -Wtrampolines -Wundef -Wunused -Wunused-macros -Werror=format-security -Werror=return-type -Werro
      r=shadow -Werror=uninitialized

--> -fsanitize=address schaltet (wenn ich das auf https://clang.llvm.org/docs/AddressSanitizer.html#usage gerade richtig nachgelesen habe) ja gerade ASan ein. ich schaue mal, wo das compile.sh falsch abgebogen sein könnte

ja hmpf. wie's aussieht, hängt es wohl daran, dass die reihenfolge im ARGV darüber entscheidet, wie USE_ASAN gesetzt wird:

183 while [ $# -gt 0 ]
184 do
185   case $1 in
186     -a|--no-asan)
187       USE_ASAN="OFF"
188     shift
189     ;;
190     +a|--with-asan)
191       USE_ASAN="ON"
...
224     -d|--debug)
225       BUILD_TYPE="Debug"
226       USE_ASAN="ON"
227     shift

..aber wie ich gerade gesehen habe, weist die online-Hilfe darauf auch hin (wer lesen kann, und es auch tut, ist wie so oft klar im Vorteil) - seufz

Edited: 2021-10-03, 23:17

sapere aude!

user, advocate, and sometimes developer of free (as in freedom) software

Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 1477
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2021-10-04, 11:11

Bzgl ASan: Also die -d-Option ist ganz neu, bis vor kurzem war Debug mit ASan der Standard und die Optionen -r -a haben das jeweils umgeschaltet. Dass -d ein vorheriges -a überschreibt ist also ein Bug. Übrigens, wenn du einmal mit ASan kompiliert hast kannst du es nicht mehr nachträglich abschalten sondern musst dazu das gesamte Build-Verzeichnis löschen.

ASan hat laut Dokumentation angeblich garantiert immer Recht wenn es Memory Leaks meldet. Allerdings soll es angeblich eine Möglichkeit geben, Leaks aus 3rd-Party-Bibliotheken zu unterdrücken … das muss ich mir mal anschauen.

Bezüglich asserts: Das Texture-Assert ist ein Bug, der im Nachgang des neuen Multithreading-Features noch manchmal nicht-reproduzierbar auftaucht (lies: meine Schuld face-wink.png ), und andere Asserts sind mit hoher Wahrscheinlichkeit auch damit verwandt. Falls du diese Asserts öfter siehst könntest du versuchen sie in gdb zu fangen:

gdb ./widelands
   run
   (... warten bis es ein SIGABRT gibt ...)
   bt
   info threads
   thread N   # N ist dabei die ID des anderen Widelands-Threads – meist hat der eine Thread ID 1 und der andere 23 oder 24
   bt

Die Backtrace beider Threads wäre zum Debuggen enorm hilfreich face-smile.png

Edited: 2021-10-04, 11:11

Top Quote
dr1fter
Avatar
Joined: 2021-09-15, 20:15
Posts: 15
Ranking
Pry about Widelands
Location: Germany
Posted at: 2021-10-04, 11:33

Übrigens, wenn du einmal mit ASan kompiliert hast kannst du es nicht mehr nachträglich abschalten sondern musst dazu das gesamte Build-Verzeichnis löschen.

tatsächlich! Ich hatte - nachdem um die 300 compile-units neugebaut worden sind - fälschlicherweise angenommen, dass das Abschalten von ASan wirksam geworden sei (stutzig gemacht hatte mich indessen, dass CMAKE_EXE_LINKER_FLAGS im CMakeCache.txt trotzdem noch -fsanitize=address als Wert hatte

Dass -d ein vorheriges -a überschreibt ist also ein Bug

allerdings einer, den ihr dokumentiert habt (steht in der online-hilfe direkt beim -a dran..):

65 echo " Note: The ASan setting is overridden by setting the build type, so these" 66 echo " options should be given after the build type option, when needed."

kann mal schauen, ob ich eine Korrektur dazu als PR einreiche, wenn gewünscht? So ein paar Zeilen Bourne Shell Script bekomme ich sicherlich noch hin face-smile.png

Die Backtrace beider Threads wäre zum Debuggen enorm hilfreich face-smile.png

ah, danke für die Hinweise/Erklärungen. Da ich (denke ich) den Fehler reproduzieren kann, schaue ich mal, ob ich demnächst die Muße finde, die die Backtraces nachzuliefern (wollte eh' schon länger mal etwas in's Debuggung mit gdb einsteigen..)


sapere aude!

user, advocate, and sometimes developer of free (as in freedom) software

Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 1477
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2021-10-04, 11:59

Dass -d ein vorheriges -a überschreibt ist also ein Bug

allerdings einer, den ihr dokumentiert habt (steht in der online-hilfe direkt beim -a dran..):

65 echo " Note: The ASan setting is overridden by setting the build type, so these"
66 echo " options should be given after the build type option, when needed."

kann mal schauen, ob ich eine Korrektur dazu als PR einreiche, wenn gewünscht? So ein paar Zeilen Bourne Shell Script bekomme ich sicherlich noch hin face-smile.png

Gerne face-smile.png


Top Quote
Caldessa
Avatar
Joined: 2021-10-04, 00:54
Posts: 7
Ranking
Pry about Widelands
Posted at: 2021-10-06, 11:42

Hallo zusammen. Ich würde gerne auch ein wenig rumtüfteln, habe aber so leider gar keine Ahnung wie ich vorgehen muss. Gibts da eine "einfache" Möglichkeit und Beschreibung dazu?

Gruss Caldessa


Coming directly from Settlers 2

Top Quote
dr1fter
Avatar
Joined: 2021-09-15, 20:15
Posts: 15
Ranking
Pry about Widelands
Location: Germany
Posted at: 2021-10-06, 13:23

Caldessa wrote:

Ich würde gerne auch ein wenig rumtüfteln, habe aber so leider gar keine Ahnung wie ich vorgehen muss. Gibts da eine "einfache" Möglichkeit und Beschreibung dazu?

Woran möchtest du denn knobeln? Am Build, oder eher am "richtigen" Code? face-smile.png

Die Quellen findest du auf github.com:

https://github.com/widelands bzw. https://github.com/widelands/widelands

Im CONTRIBUTING.md wird auf das widelands-wiki verwiesen, in dem grob umrissen wird, wie man sich beteiligen kann:

https://www.widelands.org/wiki/Contribute/

Falls du dich tatsächlich speziell für den Build interessierst (das ist ja typischerweise eher ein Rand-Thema^^), könnte vermutlich die Lektüre der Dokumentationen zu CMake und ninja helfen (eher CMake):

https://cmake.org/ https://cmake.org/cmake/help/v3.7/generator/Ninja.html

Wo man eine Referenzdokumentation zur Bourne Shell findet, weiß ich nicht (man findet per Google einiges auf diversen Universitäten). Allerdings gibt es die Referenzdokumentation zur GNU Bourne-Again-Shell (aka bash):

https://www.gnu.org/software/bash/manual/bash.html

Caveat: das shebang im compile.sh verweist explizit auf die bourne-shell. Daher nehme ich an, dass es unerwünscht ist, bash-spezifika zu verwenden (bash ist eine zur bourne-shell kompatible shell mit zu bourne-shell inkompatiblen Erweiterungen (bspw. [[ vs [).

Weiß nicht, ob ich dir damit helfen konnte. Vllt noch ein Hinweis: wenn du vorhast, unter Windows zu entwickeln: davon kann ich aus persönlicher mehrjähriger Erfahrung nur abraten (man macht sich das Leben da schon unnötig schwer..) face-smile.png


sapere aude!

user, advocate, and sometimes developer of free (as in freedom) software

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2037
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2021-10-06, 14:03

dr1fter wrote:

Weiß nicht, ob ich dir damit helfen konnte. Vllt noch ein Hinweis: wenn du vorhast, unter Windows zu entwickeln: davon kann ich aus persönlicher mehrjähriger Erfahrung nur abraten (man macht sich das Leben da schon unnötig schwer..) face-smile.png

Mit den richtigen Tools und dem richtigen Setup geht das einwandfrei. Zumindest arbeite ich so. Allerdings gebe ich zu, dass es unter linux ggf einfacher ist. Falls hier Beratungsbedarf ist einfach melden.


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2037
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2021-10-06, 14:06

Caldessa wrote:

Hallo zusammen. Ich würde gerne auch ein wenig rumtüfteln, habe aber so leider gar keine Ahnung wie ich vorgehen muss. Gibts da eine "einfache" Möglichkeit und Beschreibung dazu?

Gruss Caldessa

Wie dr1fter schon schrieb, kommt es darauf an was du ausprobieren möchtest. Falls es um "Cheats" geht, wäre eine Beschäftigung mit unserem Lua Interface hilfreich. (https://www.widelands.org/documentation/lua_index/)
Für ein spezifisches ÜProblem können wir auch den richtigen Einstiegspunkt benennen.
Das gleichze gilt auch für unseren Source Code falls man sich hier beteiligen möchte

Edited: 2021-10-06, 14:07

Top Quote