프로그래밍할 때는 반드시 버그가 발생합니다. 또한 Lua에서 설정한 프로젝트의 동작이 많을수록 버그가 많을 것입니다.
다행히 해결 방법이 없는 것은 아닙니다. 디버거를 사용하여 버그를 추적하고 제거할 수 있습니다.
Stingray Lua 코드를 디버깅하는 가장 좋은 방법은 무료 오픈 소스 Visual Studio Code 편집기용 확장을 사용하는 것입니다. 확장을 사용하면 실행 중인 모든 엔진 인스턴스에 Visual Studio Code를 연결하고, 중단점을 설정하고, 코드를 추적하고, 콘솔 명령과 Lua 코드 조각을 엔진으로 보내는 등의 많은 작업을 수행할 수 있습니다.
디버거 사용에 익숙한 경우 확장 홈 페이지로 이동하여 설정 및 사용 방법에 대한 자세한 내용을 참고하십시오.
초보 프로그래머의 경우 코드 쓰기만으로도 충분히 어려운 작업일 수 있습니다. 많은 프로그래머들이 코드 디버깅에 도움이 될 수 있는 도구 사용 방법을 배우는 대신 디버그 메시지 인쇄 같이 코드로부터 피드백을 얻는 "더 간단한" 방법을 찾는 데 열중하고 있습니다.
그러나 효과적인 디버깅 도구 사용 방법을 배우는 것은 매우 가치 있는 투자입니다. 효율적으로 문제를 차단할 수 있을 뿐만 아니라 향후에 유사한 버그를 만들지 않도록 하는 태도와 코딩 습관을 기를 수 있습니다.
프로그래밍 자체와 마찬가지로 디버깅은 아무 곳이나 들쑤시는 것보다 구조화된 방법으로 문제에 접근할 때 가장 효과적입니다. 먼저 코드에 대한 가설을 세우고 디버깅 도구를 사용하여 이러한 가설을 테스트하십시오. 예를 들어 문제가 어디에 있다고 생각합니까? 그 이유는 무엇입니까? 그 곳에서 문제가 발생하거나 발생하지 않으면 어떻게 하시겠습니까? 어떤 가정에 따라 코드를 작성했습니까? 이러한 가정이 실제로 유효한지 여부를 어떻게 테스트하시겠습니까?
이와 같은 질문을 자문해보며 예상하는 결과와 실제로 얻는 결과의 차이점을 발견하고 그 이유를 찾는 데 집중할 수 있습니다.
디버거를 사용하여 코드의 문제를 추적하는 작업은 일반적으로 아래에 나온 세 개의 주요 단계를 따릅니다.
잠시 실행 중지.
게임은 사용자가 따라가기에 벅찰 정도로 빠르게 Lua 코드를 평가합니다. 게임을 잠시 중지하거나 중단한 다음 생각하고 살펴볼 시간을 가져야 합니다.
일반적으로 게임을 일시 중지할 때 Lua 스크립트 특정 행에서 중단점이라고 부르는 마커를 설정합니다. 중단하려는 코드가 있는 Lua 파일을 열고 줄 번호 옆의 왼쪽 여백을 클릭하여 Visual Studio Code에서 이 작업을 수행합니다. 게임에서 Lua 스크립트를 실행하는 중 해당 행에 도달하면 자동으로 게임이 일시 중지됩니다.
또한 엔진에 연결되어 있는 동안 Visual Studio Code 디버깅 도구 모음에 있는 일시 중지 아이콘을 클릭하여 실행 중인 게임을 언제든지 일시 중지할 수도 있습니다.
코드 검사.
게임이 중단된 동안 Lua 환경의 상태 정보에 액세스할 수 있습니다. 디버깅 탭의 Variables 섹션 아래에서 로컬 변수에 할당된 값을 확인할 수 있습니다. 또는 코드 편집기 뷰에서 변수 위에 마우스 커서를 올려 놓아 확인할 수도 있습니다.
로컬 변수를 수정하고 수정된 값을 사용하여 게임을 계속할 수 있습니다. 일시 중지하는 동안 코드 편집기 뷰에서 스크립트를 수정하고 게임에 다시 로드할 수도 있습니다. Lua 코드 다시 로드도 참조하십시오.
계속 진행.
중단점에 코드 상태에서 할 수 있는 모든 사항에 대해 알게 되었다면 또 다른 중단점을 얻기 위해 여러 옵션이 있습니다.
스크립트에서 한 번에 한 행을 실행한 다음 각각을 일시 중지하며 행별로 단계 를 거칠 수 있습니다. 단계 처리 중에 현재 함수로 내려갈지, 다음 행으로 넘어갈지를 선택할 수 있습니다. 또는 계속 진행하며 다음 중단점에 도달하거나 다시 게임을 일시 중지할 때까지 게임의 정규 흐름을 다시 시작할 수 있습니다.
디버깅하는 동안 Visual Studio Code가 이러한 작업을 제어하는 데 사용할 수 있는 부동 도구 모음을 엽니다.
문제를 식별하고 수정할 수 없었다면 새로운 가설을 세우고 다시 테스트하십시오.
게임 내 Lua 환경에서 정보를 얻는 다른 방법을 확인하려면 런타임 피드백을 얻는 방법을 참조하십시오. 이 항목에서는 Stingray 런타임 Lua API의 Lua print 문과 함수를 사용하여 Log Console 패널로 메시지를 보내는 방법에 대해 설명합니다.
엔진은 dev 구성에서 실행되는 동안에만 디버깅할 수 있습니다. 성능 및 보안을 위해 엔진의 release 구성은 엔진과 메시지를 교환하기 위해 디버거가 사용하는 콘솔 연결을 제거하도록 최적화되어 있습니다.
즉, 다음은 디버깅할 수 있습니다.
그러나 다음은 디버깅할 수 없습니다.