|
测试 tolua 例子 TestErrorStack
(金庆的专栏 2020.9)
Error1
点击 “Error1” 按钮c# showStack.PCall()lua ShowStack()c# Test1()c# try { show.PCall() }lua Show() error(‘this is error’)
- LuaException: TestErrorStack:2: this is error
- stack traceback:
- [C]: in function 'error'
- TestErrorStack:2: in function <TestErrorStack:1>
- [C]: in function 'Test1'
- TestErrorStack:6: in function <TestErrorStack:5>
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:758)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:Test1(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:27)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:375)
复制代码 lua Show() 中抛 error, 在 C# 中 try-catch 得到,
通过 toluaL_exception() 返回 Lua 调用者 ShowStack(),
ShowStack() 中止执行,传递异常到 c# 调用者 OnGUI(),
OnGUI()中断执行,打印错误信息。
Instantiate Error
“Instantiate Error”c# GetFunction(“Instantiate”).PCall()lua Instantiate()c# UnityEngine.Object.Instantiate(obj)c# TestInstantiate.Awake()c# try { GetFunction(“Show”).PCall() }lua Show()c# state.ThrowLuaException(e)
- LuaException: TestErrorStack:2: this is error
- stack traceback:
- [C]: in function 'error'
- TestErrorStack:2: in function <TestErrorStack:1>
- [C]: in function 'Instantiate'
- TestErrorStack:12: in function <TestErrorStack:11>
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:758)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestInstantiate:Awake() (at Assets/ToLua/Examples/TestErrorStack/TestInstantiate.cs:15)
- UnityEngine.Object:Instantiate(Object)
- UnityEngine_ObjectWrap:Instantiate(IntPtr) (at Assets/ToLua/BaseType/UnityEngine_ObjectWrap.cs:203)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:391)
复制代码 在 lua 中实例化对象,Awake() 中向lua抛异常:state.ThrowLuaException(e)。
中止了 lua 调用和 OnGUI(), 但是新对象的 Start() 成功调用了。
因为 Awake() 中 catch 了异常,按执行成功处理。
如果 Awake() 中不 catch, Awake() 执行异常,也不会有 Start() 调用,但是lua Instantiate() 执行会成功,打印出对象名。
Check Error
“Check Error”c# GetFunction(“TestRay”).PCall()lua TestRay() return Vector3.zeroc# CheckRay(); //返回值出错
- LuaException: bad argument #2 (Ray expected, got Vector3)
- LuaInterface.LuaDLL:luaL_argerror(IntPtr, Int32, String) (at Assets/ToLua/Core/LuaDLL.cs:692)
- LuaInterface.LuaDLL:luaL_typerror(IntPtr, Int32, String, String) (at Assets/ToLua/Core/LuaDLL.cs:706)
- LuaInterface.LuaStatePtr:LuaTypeError(Int32, String, String) (at Assets/ToLua/Core/LuaStatePtr.cs:534)
- LuaInterface.LuaState:CheckRay(Int32) (at Assets/ToLua/Core/LuaState.cs:1505)
- LuaInterface.LuaFunction:CheckRay() (at Assets/ToLua/Core/LuaFunction.cs:781)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:403)
复制代码 Push Error
“Push Error”c# func.Push(Instance);
- 14:04:31.371-157: Type TestLuaStack not wrap to lua, push as UnityEngine.MonoBehaviour, the warning is only raised once
- UnityEngine.Debug:LogWarning(Object)
- LuaInterface.Debugger:LogWarning(String)
- LuaInterface.Debugger:LogWarning(String, Object, Object)
- LuaInterface.LuaState:GetMissMetaReference(Type) (at Assets/ToLua/Core/LuaState.cs:1917)
- LuaInterface.LuaStatic:GetMissMetaReference(IntPtr, Type) (at Assets/ToLua/Core/LuaStatic.cs:39)
- LuaInterface.ToLua:LoadPreType(IntPtr, Type) (at Assets/ToLua/Core/ToLua.cs:2608)
- LuaInterface.ToLua:PushUserObject(IntPtr, Object) (at Assets/ToLua/Core/ToLua.cs:2622)
- LuaInterface.ToLua:Push(IntPtr, Object) (at Assets/ToLua/Core/ToLua.cs:2636)
- LuaInterface.LuaState:Push(Object) (at Assets/ToLua/Core/LuaState.cs:1378)
- LuaInterface.LuaFunction:Push(Object) (at Assets/ToLua/Core/LuaFunction.cs:465)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:412)
复制代码 LuaPushError
“LuaPushError”c# GetFunction(“PushLuaError”).PCall()lua PushLuaError()lua TestStack.PushLuaError()c# PushLuaError()c# try { testRay.Push(Instance); }
仅是警告,没有异常
Check Error
“Check Error”c# GetFunction(“Test5”).PCall()lua Test5()lua TestStack.Test5()c# Test5()c# GetFunction(“Test4”).PCall()lua TestStack.Test4()c# Test4()c# try { show.PCall() }
- LuaException: TestErrorStack:2: this is error
- stack traceback:
- [C]: in function 'error'
- TestErrorStack:2: in function <TestErrorStack:1>
- [C]: in function 'Test4'
- TestErrorStack:30: in function <TestErrorStack:29>
- [C]: in function 'Test5'
- TestErrorStack:34: in function <TestErrorStack:33>
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:758)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:Test4(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:85)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:Test5(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:102)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:434)
复制代码 Test Resume
“Test Resume”c# GetFunction(“Test6”).PCall()lua Test6()lua 协程中调用 TestStack.Test6(go)c# toluaL_exception()
lua coroutine resume() 返回 false, 不会有错误。
out of bound
“out of bound”c# GetFunction(“TestOutOfBound”).PCall()c# TestOutOfBound()c# toluaL_exception(L, e)
- LuaException: Transform child out of bounds
- stack traceback:
- [C]: at 0x613c2af0
- TestLuaStack:TestOutOfBound(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:136)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:454)
复制代码 TestArgError
“TestArgError”c# GetFunction(“Test8”).PCall()lua Test8()lua TestArgError()c# TestArgError()c# toluaL_exception(L, e)
- LuaException: TestErrorStack:69: bad argument #1 to 'TestArgError' (number expected, got string)
- stack traceback:
- [C]: in function 'TestArgError'
- TestErrorStack:69: in function <TestErrorStack:68>
- LuaInterface.LuaDLL:luaL_argerror(IntPtr, Int32, String) (at Assets/ToLua/Core/LuaDLL.cs:692)
- LuaInterface.LuaDLL:luaL_typerror(IntPtr, Int32, String, String) (at Assets/ToLua/Core/LuaDLL.cs:706)
- TestLuaStack:TestArgError(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:151)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:463)
复制代码 TestFuncDispose
“TestFuncDispose”c# func.Dispose();c# func.PCall();
- LuaException: LuaFunction has been disposed
- LuaInterface.LuaFunction:BeginPCall() (at Assets/ToLua/Core/LuaFunction.cs:73)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:473)
复制代码 SendMessage
“SendMessage”c# gameObject.SendMessage(“OnSendMsg”);c# OnSendMsg()c# try { GetFunction(“TestStack.Test6”).PCall() }c# Test6()c# toluaL_exception(L, e);
- LuaException: this a lua exception
- stack traceback:
- [C]: at 0x613c2af0
- [C]: in function 'TestArgError'
- TestErrorStack:69: in function <TestErrorStack:68>
- TestLuaStack:Test6(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:122)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnSendMsg() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:277)
- UnityEngine.GameObject:SendMessage(String)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:481)
复制代码 SendMessage() 等效于直接调用?
SendMessageInLua
“SendMessageInLua”c# GetFunction(“SendMsgError”).PCall()lua SendMsgError(go)lua go:SendMessage(“OnSendMsg”);
- LuaException: this a lua exception
- stack traceback:
- [C]: at 0x613c2af0
- [C]: in function 'SendMessage'
- TestErrorStack:38: in function <TestErrorStack:37>
- [C]: in function 'TestArgError'
- TestErrorStack:69: in function <TestErrorStack:68>
- TestLuaStack:Test6(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:122)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnSendMsg() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:277)
- UnityEngine.GameObject:SendMessage(String)
- UnityEngine_GameObjectWrap:SendMessage(IntPtr) (at Assets/Source/Generate/UnityEngine_GameObjectWrap.cs:657)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:488)
复制代码 和 “SendMessage” 差不多一样。
AddComponent
“AddComponent”c# GetFunction(“TestAddComponent”).PCall()c# TestAddComponent()c# try { go.AddComponent(); }c# TestInstantiate2.Awake()c# state.ThrowLuaException(e);
- Exception: Instantiate exception 2
- LuaInterface.LuaStatePtr.ThrowLuaException (System.Exception e) (at Assets/ToLua/Core/LuaStatePtr.cs:607)
- TestInstantiate2.Awake () (at Assets/ToLua/Examples/TestErrorStack/TestInstantiate2.cs:16)
- UnityEngine.GameObject:AddComponent()
- TestLuaStack:TestAddComponent(IntPtr) (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:237)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:498)
复制代码 TableGetSet
TestTableInCo
“TestTableInCo”c# GetFunction(“TestCoTable”).PCall()lua TestCoTable()lua 运行协程 TestCo(…)lua TestTableInCo(…)c# TestTableInCo()
Instantiate2 Error
“Instantiate2 Error”c# GetFunction(“Instantiate”).PCall() with go2lua Instantiate()lua UnityEngine.Object.Instantiate(obj)c# TestInstantiate2:Awake()
- LuaException: Instantiate exception 2
- stack traceback:
- [C]: in function 'Instantiate'
- TestErrorStack:13: in function <TestErrorStack:11>
- [C]: in function 'TestArgError'
- TestErrorStack:69: in function <TestErrorStack:68>
- TestInstantiate2:Awake() (at Assets/ToLua/Examples/TestErrorStack/TestInstantiate2.cs:11)
- UnityEngine.Object:Instantiate(Object)
- UnityEngine_ObjectWrap:Instantiate(IntPtr) (at Assets/ToLua/BaseType/UnityEngine_ObjectWrap.cs:203)
- LuaInterface.LuaDLL:lua_pcall(IntPtr, Int32, Int32, Int32)
- LuaInterface.LuaState:PCall(Int32, Int32) (at Assets/ToLua/Core/LuaState.cs:755)
- LuaInterface.LuaFunction:PCall() (at Assets/ToLua/Core/LuaFunction.cs:96)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:573)
复制代码 Instantiate3 Error
“Instantiate3 Error”c# UnityEngine.Object.Instantiate(go2);c# TestInstantiate2.Awake()
- Exception: Instantiate exception 2
- LuaInterface.LuaStatePtr.ThrowLuaException (System.Exception e) (at Assets/ToLua/Core/LuaStatePtr.cs:607)
- TestInstantiate2.Awake () (at Assets/ToLua/Examples/TestErrorStack/TestInstantiate2.cs:16)
- UnityEngine.Object:Instantiate(GameObject)
- TestLuaStack:OnGUI() (at Assets/ToLua/Examples/TestErrorStack/TestLuaStack.cs:580)
复制代码 TestCycle
“TestCycle”c# GetFunction(“TestCycle”).PCall()c# TestCycle()
测试递归调用 luaFunction
TestNull
“TestNull”c# StartCoroutine(TestCo(action));
c# 中创建协程
TestMulti
“TestMulti”c# GetFunction(“TestMulStack”).PCall()c# TestMulStack()c# try { TestMul0(); }c# TestMul1()throw
|
|