This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold에는 검사 기능을 갖춘 통합 Lua 디버거가 포함되어 있습니다. 내장 프로파일링 도구와 함께 사용하면 게임 로직의 버그 원인을 찾거나 성능 문제를 분석하는 데 도움이 되는 강력한 도구입니다.
Defold에서 게임을 디버깅하는 가장 간단한 방법은 print 디버깅을 사용하는 것입니다. print() 또는 pprint() 문을 사용해 변수를 확인하거나 실행 흐름을 표시합니다. 스크립트가 없는 게임 오브젝트가 이상하게 동작한다면, 디버깅 목적으로만 스크립트를 붙여도 됩니다. 출력 함수 중 하나를 사용하면 에디터의 Console 뷰와 게임 로그에 출력됩니다.
출력 외에도 엔진은 화면에 디버그 텍스트와 직선을 그릴 수 있습니다. 이는 @render 소켓으로 메세지를 보내 수행합니다:
-- 화면에 디버그 텍스트로 "my_val" 값 그리기
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- 화면에 색상이 지정된 텍스트 그리기
local color_green = vmath.vector4(0, 1, 0, 1)
msg.post("@render:", "draw_debug_text", { text = "Custom color", position = vmath.vector3(200, 180, 0), color = color_green })
-- 화면에 플레이어와 적 사이의 디버그 라인 그리기
local start_p = go.get_position("player")
local end_p = go.get_position("enemy")
local color_red = vmath.vector4(1, 0, 0, 1)
msg.post("@render:", "draw_line", { start_point = start_p, end_point = end_p, color = color_red })
시각적 디버그 메세지는 렌더링 파이프라인에 데이터를 추가하며 일반 렌더 파이프라인의 일부로 그려집니다.
"draw_line"은 렌더 스크립트의 render.draw_debug3d() 함수로 렌더링되는 데이터를 추가합니다."draw_text"는 /builtins/fonts/debug/always_on_top_font.material 메터리얼을 사용하는 /builtins/fonts/debug/always_on_top.font로 렌더링됩니다."draw_debug_text"는 "draw_text"와 같지만, 커스텀 색상으로 렌더링됩니다.이 데이터는 매 프레임 업데이트하려 할 가능성이 높으므로 update() 함수에서 메세지를 보내는 것이 좋습니다.
디버거를 실행하려면 Debug ▸ Start/Attach를 선택합니다. 그러면 디버거가 연결된 상태로 게임이 시작되거나, 이미 실행 중인 게임에 디버거가 연결됩니다.

디버거가 연결되면 콘솔의 디버거 제어 버튼이나 Debug 메뉴를 통해 게임 실행을 제어할 수 있습니다:


nextspawn() 함수 호출이 있는 줄 아래의 end 문에서 중지됩니다.

Lua 코드 한 줄이 하나의 표현식에 대응되는 것은 아닙니다. 디버거에서 단계 실행은 한 번에 하나의 표현식씩 앞으로 이동하므로, 현재는 다음 줄로 진행하려면 step 버튼을 두 번 이상 눌러야 할 수 있습니다.
nextspawn() 함수 안으로 들어갔습니다.


브레이크포인트를 설정하거나 해제하려면 코드 에디터에서 줄 번호 바로 오른쪽 열을 클릭합니다. 메뉴에서 Edit ▸ Toggle Breakpoint를 선택할 수도 있습니다.
Enabled 체크박스를 토글합니다. 비활성화된 브레이크포인트는 비활성 상태임을 나타내기 위해 속이 빈 모양으로 표시됩니다.


브레이크포인트 조건을 편집하려면 코드 에디터에서 줄 번호 바로 오른쪽 열을 마우스 오른쪽 버튼으로 클릭하거나, 메뉴에서 Edit ▸ Edit Breakpoint를 선택합니다.

현재 평가기를 통해서는 변수를 수정할 수 없습니다.

여러 스크립트에 걸쳐 여러 브레이크포인트를 작업할 때, Breakpoints 탭은 모든 브레이크포인트를 한곳에서 관리할 수 있는 통합된 뷰를 제공합니다.
개별 브레이크포인트를 다룰 때:
Ctrl/Cmd+click 또는 Shift+click을 사용해 여러 브레이크포인트를 선택한 다음 마우스 오른쪽 버튼을 클릭해 일괄 작업을 수행합니다. 여러 브레이크포인트의 조건을 동시에 편집하거나, 활성 상태를 토글하거나, 완전히 제거할 수 있습니다.
툴바 버튼을 사용하면 모든 브레이크포인트를 한 번에 활성화, 비활성화 또는 토글할 수 있습니다. 게임을 멈추지 않고 실행하고 싶지만 브레이크포인트 위치는 잃고 싶지 않을 때 유용합니다. 디버깅 세션이 끝나면 모두 제거할 수도 있습니다.
Lua에는 특정 상황에서 유용한 debug 라이브러리가 포함되어 있으며, 특히 Lua 환경의 내부를 검사해야 할 때 유용합니다. 자세한 내용은 Lua 매뉴얼의 Debug Library 장에서 확인할 수 있습니다.
에러가 발생하거나 게임이 예상대로 동작하지 않는다면 다음 디버깅 체크리스트를 확인하세요:
콘솔 출력을 확인하고 런타임 에러가 없는지 검증합니다.
코드에 print 문을 추가해 코드가 실제로 실행되는지 검증합니다.
코드가 실행되지 않는다면, 코드 실행에 필요한 적절한 설정을 에디터에서 완료했는지 확인합니다. 스크립트가 올바른 게임 오브젝트에 추가되어 있나요? 스크립트가 입력 포커스를 획득했나요? input-triggers가 올바른가요? 쉐이더 코드가 메터리얼에 추가되었나요? 등입니다.
코드가 변수 값에 의존한다면(예: if 문), 해당 값이 사용되거나 검사되는 위치에서 print로 출력하거나 디버거로 검사합니다.
버그를 찾는 일은 때로 어렵고 시간이 많이 걸릴 수 있습니다. 코드 조각을 하나씩 훑으며 모든 것을 확인하고, 문제가 있는 코드를 좁혀 가며 에러 원인을 제거해야 할 수 있습니다. 이 작업에는 “분할 정복(divide and conquer)”이라는 방법이 가장 좋습니다:
성공적인 버그 찾기를 바랍니다!
물리에 문제가 있거나 충돌이 예상대로 동작하지 않는다면 물리 디버깅을 활성화하는 것을 권장합니다. game.project 파일의 Physics 섹션에서 Debug 체크박스를 선택합니다:

이 체크박스가 활성화되면 Defold는 모든 충돌 모형과 충돌 접점을 그립니다:
