나는 실행중인 프로세스의 루아 스크립트 디버거를 작성하는 노력하고있어 및 (C에서) 그렇게하는 문서화 된 방법은 lua_sethook
사용하는 것입니다lua_sethook 컨텍스트를 lua_sethook와 연결하는 방법은 무엇입니까?
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
:
int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
lua_Hook
는 다음과 같이 정의된다
후크는 lua_State
포인터 만 가져옵니다.이 포인터는 내 디버거 클래스에 포인터를 연결하여 그 위치에서 다시 디버거 클래스로 가져올 수 있습니까?
lua_State
인스턴스가 여러 개인 경우이 경우 전역 변수를 사용하지 않는 것이 좋습니다. 나는 디버거 인스턴스에 lua_State *
포인터의 맵을 사용할 수 있다고 생각하지만, 효율적이지는 않습니다. lua_State *
에 전역으로 저장하는 것은 이해할 수없는 것처럼 보입니다. 검색 할 수 있으려면 최소한 하나의 값을 루아 스택에 넣어야 만합니다.이 경우에는 어렵거나 불가능한 것처럼 보입니다. 루아 스택 오버플로.
내가 누락 된 항목이 있습니까? 나는 어떻게 이것을 성취 할 것인가? 알아요, 루아 코드에서이 작업을 수행 할 수 있지만 C 측에서이 작업을 수행 할 수있는 방법을 알고 싶습니다.
디버거 클래스와'lua_State'의 다중성 관계는 무엇입니까? 예를 들어, 주어진'lua_State'에 최대 하나의 디버거 클래스가 있다고 가정 할 수 있습니까? 디버거 클래스가 여러 lua_State 사이에서 공유 될 수 있습니까? 아니면 각 lua_State가 고유 한 독립 실행 형 디버거 클래스를 가질 수 있습니까? – greatwolf
내 경우에는 1 : 1 관계입니다. 디버거 클래스는 하나의 lua_State *에 대한 포인터를 가지며, 어떻게 든 lua_Hook 함수의 lua_State *에서 디버거 클래스로 효과적으로 갈 수 있어야합니다. – Tom
루아 레지스트리에 저장하는 것은 어떨까요? 여전히'hook' 함수로 스택에 푸시해야하지만, 오버플로가 걱정되는 이유는 모르겠습니다. 'lua_checkstack'을 그냥 할 수는 없습니까? 그리고 C 코드에서 실패하면 그냥 할 수 있습니까? – greatwolf