void OnGUI()
    {
        GUI.Label(new Rect(Screen.width / 2 - 300, Screen.height / 2 - 150, 800, 400), tips);

        if (GUI.Button(new Rect(10, 10, 120, 40), "Error1"))
        {
            tips = "";
            showStack.BeginPCall();
            showStack.Push(go);
            showStack.PCall();
            showStack.EndPCall();
            showStack.Dispose();
            showStack = null;
        }
        else if (GUI.Button(new Rect(10, 60, 120, 40), "Instantiate Error"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("Instantiate");
            func.BeginPCall();
            func.Push(go);
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 110, 120, 40), "Check Error"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("TestRay");
            func.BeginPCall();
            func.PCall();
            func.CheckRay();        //返回值出错
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 160, 120, 40), "Push Error"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("TestRay");
            func.BeginPCall();
            func.Push(Instance);
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 210, 120, 40), "LuaPushError"))
        {
            //需要改lua文件让其出错
            tips = "";
            LuaFunction func = state.GetFunction("PushLuaError");
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 260, 120, 40), "Check Error"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("Test5");
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 310, 120, 40), "Test Resume"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("Test6");
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 360, 120, 40), "out of bound"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("TestOutOfBound");
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 410, 120, 40), "TestArgError"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("Test8");
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 460, 120, 40), "TestFuncDispose"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("Test8");
            func.Dispose();
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 510, 120, 40), "SendMessage"))
        {
            tips = "";
            gameObject.SendMessage("OnSendMsg");
        }
        else if (GUI.Button(new Rect(10, 560, 120, 40), "SendMessageInLua"))
        {
            LuaFunction func = state.GetFunction("SendMsgError");
            func.BeginPCall();
            func.Push(gameObject);
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(10, 610, 120, 40), "AddComponent"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("TestAddComponent");
            func.BeginPCall();
            func.Push(gameObject);
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(210, 10, 120, 40), "TableGetSet"))
        {
            tips = "";
            LuaTable table = state.GetTable("testev");
            int      top   = state.LuaGetTop();

            try
            {
                state.Push(table);
                state.LuaGetField(-1, "Add");
                LuaFunction func = state.CheckLuaFunction(-1);

                if (func != null)
                {
                    func.Call();
                    func.Dispose();
                }

                state.LuaPop(1);
                state.Push(123456);
                state.LuaSetField(-2, "value");
                state.LuaGetField(-1, "value");
                int n = (int)state.LuaCheckNumber(-1);
                Debugger.Log("value is: " + n);

                state.LuaPop(1);

                state.Push("Add");
                state.LuaGetTable(-2);

                func = state.CheckLuaFunction(-1);

                if (func != null)
                {
                    func.Call();
                    func.Dispose();
                }

                state.LuaPop(1);

                state.Push("look");
                state.Push(456789);
                state.LuaSetTable(-3);

                state.LuaGetField(-1, "look");
                n = (int)state.LuaCheckNumber(-1);
                Debugger.Log("look: " + n);
            }
            catch (Exception e)
            {
                state.LuaSetTop(top);
                throw e;
            }

            state.LuaSetTop(top);
        }
        else if (GUI.Button(new Rect(210, 60, 120, 40), "TestTableInCo"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("TestCoTable");
            func.BeginPCall();
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(210, 110, 120, 40), "Instantiate2 Error"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("Instantiate");
            func.BeginPCall();
            func.Push(go2);
            func.PCall();
            func.EndPCall();
            func.Dispose();
        }
        else if (GUI.Button(new Rect(210, 160, 120, 40), "Instantiate3 Error"))
        {
            tips = "";
            UnityEngine.Object.Instantiate(go2);
        }
        else if (GUI.Button(new Rect(210, 210, 120, 40), "TestCycle"))
        {
            tips = "";
            int         n    = 20;
            LuaFunction func = state.GetFunction("TestCycle");
            func.BeginPCall();
            func.Push(n);
            func.PCall();
            int c = (int)func.CheckNumber();
            func.EndPCall();

            Debugger.Log("Fib({0}) is {1}", n, c);
        }
        else if (GUI.Button(new Rect(210, 260, 120, 40), "TestNull"))
        {
            tips = "";
            Action action = () =>
            {
                LuaFunction func = state.GetFunction("TestNull");
                func.BeginPCall();
                func.PushObject(null);
                func.PCall();
                func.EndPCall();
            };

            StartCoroutine(TestCo(action));
        }
        else if (GUI.Button(new Rect(210, 310, 120, 40), "TestMulti"))
        {
            tips = "";
            LuaFunction func = state.GetFunction("TestMulStack");
            func.BeginPCall();
            func.PushObject(null);
            func.PCall();
            func.EndPCall();
        }
    }