테스트 tolua 예 TestErrorStack

테스트 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 <1>
    	[C]: in function 'Test1'
    	TestErrorStack:6: in function <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 <1>
    	[C]: in function 'Instantiate'
    	TestErrorStack:12: in function <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)
    

    루아에서 실례화된 대상, Awake()에서 루아에게 이상 던지기: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.zero
  • c# 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 <1>
    	[C]: in function 'Test4'
    	TestErrorStack:30: in function <29>
    	[C]: in function 'Test5'
    	TestErrorStack:34: in function <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 <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 <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 <37>
    	[C]: in function 'TestArgError'
    	TestErrorStack:69: in function <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

  • “TableGetSet”

  • TestTableInCo

  • “TestTableInCo”
  • c# GetFunction(“TestCoTable”).PCall()
  • lua TestCoTable()
  • lua 운영 협정 TestCo(...)
  • lua TestTableInCo(…)
  • c# TestTableInCo()

  • Instantiate2 Error

  • “Instantiate2 Error”
  • c# GetFunction(“Instantiate”).PCall() with go2
  • lua Instantiate()
  • lua UnityEngine.Object.Instantiate(obj)
  • c# TestInstantiate2:Awake()
  • LuaException: Instantiate exception 2
    stack traceback:
    	[C]: in function 'Instantiate'
    	TestErrorStack:13: in function <11>
    	[C]: in function 'TestArgError'
    	TestErrorStack:69: in function <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
  • 좋은 웹페이지 즐겨찾기