lua 디버그 라이브러리를 사용하여 변수 값이 변경된 경우이를 감지 할 수 있습니까? 값이 변경된 함수, 이전 값 등의 세부 정보를 제공하는 콜백 함수와 같은 것 그런 것이 가능합니까?루아 디버깅 - 변수 값 변경시 감지
후크에 대해 읽었지만 후크를 변수로 설정할 수 있는지 확실하지 않습니다.
lua 디버그 라이브러리를 사용하여 변수 값이 변경된 경우이를 감지 할 수 있습니까? 값이 변경된 함수, 이전 값 등의 세부 정보를 제공하는 콜백 함수와 같은 것 그런 것이 가능합니까?루아 디버깅 - 변수 값 변경시 감지
후크에 대해 읽었지만 후크를 변수로 설정할 수 있는지 확실하지 않습니다.
사용 괜찮다면 디버거를 사용하면 일부 디버거에서 표현식의 조건이 참일 때 실행되는 조사 식을 설정할 수 있습니다. 이것을 MobDebug에서 어떻게 수행 할 수 있는지 보여줄 것입니다. (lua 디버그 라이브러리를 사용하고 있지만, 내가 아는 한 변수 변경을 감지하는 직접적인 방법은 없습니다).
print("Start")
local foo = 0
for i = 1, 3 do
local function bar()
print("In bar")
end
foo = i
print("Loop")
bar()
end
print("End")
하자 우리는 아래와 같은 스크립트 start.lua
을 가지고 foo
값 2를 얻을 곳 감지하고 싶은 말은 귀하의 스크립트와 함께 폴더에).
lua -e "require('mobdebug').listen()"
명령을 사용하여 서버를 시작하십시오.lua -e "require('mobdebug').loop()"
명령을 사용하여 클라이언트를 시작하십시오.load start.lua
을 입력하십시오.step
다음으로 step
입니다. "파일 시작시 일시 중지되었습니다 .lua line 3"이 표시됩니다.foo
값이 무엇인지 보자. eval foo
을 입력하면 0이 표시됩니다.setw foo == 2
. setw 명령 다음에 Lua 표현식을 지정할 수 있습니다. 조건이 참으로 평가되면 스크립트의 실행이 중지됩니다.foo
의 값을 2로 변경했으며 실행이 8 행에서 중지되었음을 의미합니다. 그런 다음 스크립트와 현재 값을 검사 할 수 있습니다 ("eval"및 "exec"명령을 사용하여 Lua 코드를 실행할 수 있음). 스크립트 환경에서 평가)를 사용하여 변경 사항을 트리거 한 원인을 찾으십시오.이 접근법의 이점은 테이블 값을 모니터링하는 것으로 국한되지 않고 모든 표현식을 지정할 수 있다는 것입니다. 가장 큰 단점은 스크립트가 디버거에서 실행되고 각 단계마다 표현식이 평가되므로 속도가 느려질 수 있다는 점입니다.
매우 편리합니다. 나는이 깔끔한 라이브러리를 가지고 어지러운 행동을 할 것입니다 .. 감사합니다. 제비! – SatheeshJM
메타 테이블을 사용하고 "프록시"테이블을 유지하고 __newindex 함수 호출을 사용하여 변수를 추가하려는 시도를 감지함으로써 루아에서이를 어느 정도 할 수 있습니다.
이는 '추적 테이블에 액세스한다 "에 루아 책에서 프로그래밍 여기에 덮여 :
답해 주셔서 감사합니다! 테이블 요소에 액세스 할 때 유용합니다. 지역 변수/상승 값 만 추적해야하는 경우 어떻게해야합니까? – SatheeshJM
내가 게시 한 "참고"링크에 따르면 지역 변수를 추적하는 것은 실제로 루아에서 이루어진 일이 아니며 디버거가없는 다른 프로그래밍 언어에서도 마찬가지입니다. 당신은 Object Properties : http://lua-users.org/wiki/ObjectProperties를 살펴볼 수도 있습니다. 이것을 사용하면 알려줄 설정자를 만들 수 있습니다. –
이 래퍼와 알림을 제공하는 무료 라이브러리를 만들었습니다. https://github.com/Phrogz/notifitable – Phrogz
관심있는 개체에 대한 메타 테이블에 사용자 지정 설정 메서드를 추가 할 수 있습니다. 실행시 경고하도록합니다. – TheZ