I'm developing a mod for AI player. Currently finish the IOC container and some simple steering behavior.
How to reproduce:
1. start new game with mod
2. spawn some solders by clicking button 'S'
3. command it to follow by clicking button 'C'
4. save the game
5. quit
5. load the save
6. repeat 2~5 a few times (less than 3) will cause a crash
mod github: https://github.com/kevinmama/PandaAI/tr ... -2019-1-26
crash stack trace:
28.465 Error CrashHandler.cpp:522: Received SIGSEGV
Factorio crashed. Generating symbolized stacktrace, please wait ...
#0 0x0000000100a24342 in Logger::logStacktrace(StackTraceInfo*) (in factorio) (Logger.cpp:521)
#1 0x0000000100a119ed in CrashHandler::writeStackTrace(CrashHandler::CrashReason) (in factorio) (CrashHandler.cpp:173)
#2 0x0000000100a129c4 in CrashHandler::commonSignalHandler(int) (in factorio) (CrashHandler.cpp:524)
#3 0x0000000100a11919 in CrashHandler::SignalHandler(int) (in factorio) (CrashHandler.cpp:537)
#4 0x00007fff628aab3d in 0x00007fff628aab3d
#5 0x000000013d124540 in 0x000000013d124540
#6 0x0000000100cb62e7 in LuaBinder<LuaGuiElement>::callWrapper(lua_State*) (in factorio) (LuaBinder.hpp:326)
#7 0x0000000100d224c8 in luaD_precall(lua_State*, lua_TValue*, int) (in factorio) + 504
#8 0x0000000100d2290b in luaD_call(lua_State*, lua_TValue*, int, int) (in factorio) + 59
#9 0x0000000100d2312d in luaD_pcall(lua_State*, void (*)(lua_State*, void*), void*, long, long) (in factorio) + 93
#10 0x0000000100d25253 in GCTM(lua_State*, int) (in factorio) + 243
#11 0x0000000100d2464f in luaC_freeallobjects(lua_State*) (in factorio) + 191
#12 0x0000000100d313b2 in close_state(lua_State*) (in factorio) + 34
#13 0x0000000100942cc5 in LuaGameScript::~LuaGameScript() (in factorio) (LuaState.hpp:20)
#14 0x00000001008a498d in LuaContext::~LuaContext() (in factorio) (LuaContext.cpp:22)
#15 0x00000001008a4bfe in LuaContext::~LuaContext() (in factorio) (LuaContext.cpp:22)
#16 0x0000000100891a6a in Scenario::~Scenario() (in factorio) (Scenario.cpp:747)
#17 0x00000001000514d8 in AppManager::quitGameAndGoToMainMenu(std::__1::function<void ()>) (in factorio) (AppManager.cpp:291)
#18 0x000000010005b20c in InGameMenu::process(AppManager*) (in factorio) (AppManagerStates.cpp:332)
#19 0x000000010004caff in AppManager::process() (in factorio) (vector:633)
#20 0x0000000100763eb5 in MainLoop::prePrepare() (in factorio) (MainLoop.cpp:436)
#21 0x0000000100763aa6 in MainLoop::mainLoopStep(WorkerThread&, MainLoop::HeavyMode) (in factorio) (MainLoop.cpp:523)
#22 0x000000010075e12e in MainLoop::run(Filesystem::Path const&, Filesystem::Path const&, bool, bool, std::__1::function<void ()>, Filesystem::Path const&, MainLoop::HeavyMode) (in factorio) (MainLoop.cpp:338)
#23 0x0000000100751551 in _al_mangled_main (in factorio) (Main.cpp:1130)
#24 0x0000000100e3b097 in +[AllegroAppDelegate app_main:] (in factorio) (osx_app_delegate.m:230)
#25 0x00007fff377da104 in 0x00007fff377da104
#26 0x00007fff628b3305 in 0x00007fff628b3305
#27 0x00007fff628b626f in 0x00007fff628b626f
#28 0x00007fff628b2415 in 0x00007fff628b2415
Stack trace logging done
game crashed while loading saves
game crashed while loading saves
- Attachments
-
- factorio-current.log
- crash log
- (14.45 KiB) Downloaded 88 times
Re: game crashed while loading saves
Thanks for the report. Don't use the inspect library. It's known to be buggy and cause crashes.
Aside from that, when I test it in 0.17 it's saying you're giving "nil" in place of direction when calling: entity.walking_state = {walking=boolean, direction=defines.direction} meaning you didn't give any direction when you're meant to.
Aside from that, when I test it in 0.17 it's saying you're giving "nil" in place of direction when calling: entity.walking_state = {walking=boolean, direction=defines.direction} meaning you didn't give any direction when you're meant to.
If you want to get ahold of me I'm almost always on Discord.
Re: game crashed while loading saves
thank you, it solved.Rseding91 wrote: ↑Sat Jan 26, 2019 3:56 amThanks for the report. Don't use the inspect library. It's known to be buggy and cause crashes.
Aside from that, when I test it in 0.17 it's saying you're giving "nil" in place of direction when calling: entity.walking_state = {walking=boolean, direction=defines.direction} meaning you didn't give any direction when you're meant to.
Which library should I use in factorio to pretty print tables?
Re: game crashed while loading saves
serpent. It's included with the game and always loaded.
If you want to get ahold of me I'm almost always on Discord.
Re: game crashed while loading saves
Additionally it looks like the underlying problem is you're passing an invalid value into set_metatable() for the second parameter during on_load. set_metatable() expects nil (to remove the metatable) or a table (for the new metatable value). You're passing user-data - essentially a function pointer or C object data we've pushed into the Lua state that allows hooking Lua into the C++ game logic.
If you want to get ahold of me I'm almost always on Discord.
Re: game crashed while loading saves
I also notice you're using __index with your set_metatable() calls (as expected) however if you ever call set_metatable() on one of the LuaObjects gotten back from the Factorio Lua API you'd crash and or corrupt the game state.
If you want to get ahold of me I'm almost always on Discord.
Re: game crashed while loading saves
In order to reconstruct objects on loading, I need to check if a table is a native object. Can I check with the following code?
I change the implement of function is_native_class in kcontainer.lua and fix the issue. It works for LuaPlayer and LuaGUIElement.
the fixed branch https://github.com/kevinmama/PandaAI/tr ... -2019-1-26
Code: Select all
type(object) == 'table' and type(object.__self) == 'userdata'
the fixed branch https://github.com/kevinmama/PandaAI/tr ... -2019-1-26
Re: game crashed while loading saves
Seems strange to me. Shouldn't you know what the data is you have stored based off it's location in the global table?kevinma wrote: ↑Sat Jan 26, 2019 7:37 amIn order to reconstruct objects on loading, I need to check if a table is a native object. Can I check with the following code?
I change the implement of function is_native_class in kcontainer.lua and fix the issue. It works for LuaPlayer and LuaGUIElement.Code: Select all
type(object) == 'table' and type(object.__self) == 'userdata'
the fixed branch https://github.com/kevinmama/PandaAI/tr ... -2019-1-26
If you want to get ahold of me I'm almost always on Discord.