debug 라이브러리 심층 학습
debug.traceback, getinfo, getlocal, getupvalue로 내부 정보를 검사합니다.
debug 라이브러리 심층 학습은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
debug 라이브러리 개요
debug 라이브러리는 Lua의 내부 조사 도구 모음입니다. 이를 사용하면 모든 함수, 코루틴 또는 스택 프레임의 런타임 상태를 검사하고 수정할 수 있습니다.
debug.getinfo 심층 분석
debug.getinfo(f, what)는 다음과 같은 what 플래그를 받습니다. "n"(이름), "S"(소스), "l"(현재 줄), "u"(업밸류), "f"(함수 참조)입니다.
local function foo()
local info = debug.getinfo(1, "nSlu")
print(info.name) -- foo
print(info.short_src) -- source file
print(info.currentline) -- line number
print(info.nups) -- number of upvalues
end
foo()지역 변수 검사
debug.getlocal(level, n)은 지정된 스택 수준에서 n번째 지역 변수의 이름과 값을 반환합니다. 수준 1은 현재 함수입니다.
local function example()
local x, y = 10, 20
local i = 1
while true do
local name, val = debug.getlocal(1, i)
if not name then break end
print(name, val)
i = i + 1
end
end
example() -- x 10 / y 20지역 변수 수정
debug.setlocal(level, n, value)은 런타임에 지역 변수의 값을 변경합니다. 디버깅과 테스트에 강력하게 활용할 수 있습니다.
업밸류 검사
debug.getupvalue(fn, n)은 함수의 n번째 업밸류 이름과 값을 반환합니다. nil이 반환될 때까지 n을 증가시키며 반복하십시오.
local count = 0
local function inc() count = count + 1 end
print(debug.getupvalue(inc, 1)) -- count 0
debug.setupvalue(inc, 1, 99)
inc()
print(count) -- 100스택 순회
debug.getinfo가 nil을 반환할 때까지 수준을 증가시키면 전체 호출 스택을 순회할 수 있습니다.
local function printStackTrace()
local level = 1
while true do
local info = debug.getinfo(level, "Sln")
if not info then break end
print(level, info.short_src, info.currentline, info.name)
level = level + 1
end
enddebug.traceback
debug.traceback(msg, level)은 형식이 지정된 스택 추적 문자열을 반환합니다. 프로덕션 오류 처리에 가장 실용적인 디버그 함수입니다.
코루틴 검사
코루틴을 debug.getinfo의 첫 번째 인수로 전달하면 해당 코루틴의 스택을 검사할 수 있습니다.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)추적을 위한 debug.sethook
함수 이름을 출력하는 호출 후크를 설정하면 프로그램의 모든 함수 호출을 추적할 수 있습니다.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")이식 가능한 단정문
debug.getinfo(2, "Sl")을 사용하면 단정문 오류에 파일 및 줄 정보를 포함할 수 있습니다.
local function assert2(cond, msg)
if not cond then
local info = debug.getinfo(2, "Sl")
error(("[%s:%d] %s"):format(info.short_src, info.currentline, msg), 2)
end
end주의
디버그 라이브러리는 캡슐화를 위반하고, 프로그램을 크게 느리게 만들 수 있으며(특히 debug.sethook), 모든 환경에서 사용할 수 있는 것도 아닙니다. 개발 및 테스트에서만 사용하십시오.
debug 라이브러리 질문
debug.getupvalue(fn, 1)은 무엇을 반환합니까?
복습: debug 라이브러리 심층 분석
디버그 라이브러리는 스택 검사(getinfo), 지역 변수 검사 및 수정(getlocal/setlocal), 업밸류 접근(getupvalue/setupvalue), 후크 기반 추적(sethook)을 제공합니다. 개발에서만 신중하게 사용하십시오.
자주 묻는 질문
“debug 라이브러리 심층 학습” 강의는 무료인가요?
네 — “debug 라이브러리 심층 학습” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“debug 라이브러리 심층 학습”에서 뭘 배우나요?
debug.traceback, getinfo, getlocal, getupvalue로 내부 정보를 검사합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“debug 라이브러리 심층 학습” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- debug 라이브러리 심층 학습
- MobDebug를 이용한 원격 디버깅
- LuaProfiler를 이용한 프로파일링
- 코드 커버리지와 테스트 계측