diff options
author | Safwat Halaby <SafwatHalaby@users.noreply.github.com> | 2015-05-16 21:59:42 +0200 |
---|---|---|
committer | Safwat Halaby <SafwatHalaby@users.noreply.github.com> | 2015-05-16 21:59:42 +0200 |
commit | 4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6 (patch) | |
tree | 5cf7fe6e2f5e47d385549d5fb2258bae02ae0c6e /src/Bindings | |
parent | Merge pull request #2029 from mc-server/bedPatch (diff) | |
parent | Lua: Break into ZBS debugger on API errors. (diff) | |
download | cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.tar cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.tar.gz cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.tar.bz2 cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.tar.lz cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.tar.xz cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.tar.zst cuberite-4ace226dcd92f4d0bdc3774dd4401e56ab09f7a6.zip |
Diffstat (limited to 'src/Bindings')
-rw-r--r-- | src/Bindings/LuaState.cpp | 26 | ||||
-rw-r--r-- | src/Bindings/LuaState.h | 3 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index ccf812417..08c7e19d7 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -927,6 +927,9 @@ bool cLuaState::CheckParamTable(int a_StartParam, int a_EndParam) VERIFY(lua_getstack(m_LuaState, 0, &entry)); VERIFY(lua_getinfo (m_LuaState, "n", &entry)); AString ErrMsg = Printf("#ferror in function '%s'.", (entry.name != nullptr) ? entry.name : "?"); + + BreakIntoDebugger(m_LuaState); + tolua_error(m_LuaState, ErrMsg.c_str(), &tolua_err); return false; } // for i - Param @@ -1366,6 +1369,7 @@ int cLuaState::ReportFnCallErrors(lua_State * a_LuaState) { LOGWARNING("LUA: %s", lua_tostring(a_LuaState, -1)); LogStackTrace(a_LuaState, 1); + BreakIntoDebugger(a_LuaState); return 1; // We left the error message on the stack as the return value } @@ -1373,6 +1377,28 @@ int cLuaState::ReportFnCallErrors(lua_State * a_LuaState) +int cLuaState::BreakIntoDebugger(lua_State * a_LuaState) +{ + // Call the BreakIntoDebugger function, if available: + lua_getglobal(a_LuaState, "BreakIntoDebugger"); + if (!lua_isfunction(a_LuaState, -1)) + { + LOGD("LUA: BreakIntoDebugger() not found / not a function"); + lua_pop(a_LuaState, 1); + return 1; + } + lua_insert(a_LuaState, -2); // Copy the string that has been passed to us + LOGD("Calling BreakIntoDebugger()..."); + lua_call(a_LuaState, 1, 0); + LOGD("Returned from BreakIntoDebugger()."); + + return 0; +} + + + + + //////////////////////////////////////////////////////////////////////////////// // cLuaState::cRef: diff --git a/src/Bindings/LuaState.h b/src/Bindings/LuaState.h index b38401fd8..5b4ec3ae4 100644 --- a/src/Bindings/LuaState.h +++ b/src/Bindings/LuaState.h @@ -389,6 +389,9 @@ protected: /** Used as the error reporting function for function calls */ static int ReportFnCallErrors(lua_State * a_LuaState); + + /** Tries to break into the MobDebug debugger, if it is installed. */ + static int BreakIntoDebugger(lua_State * a_LuaState); } ; |