디버깅

Roblox Studio는 통합 개발 환경(IDE)에서 일반적으로 찾을 수 있는 많은 디버깅 도구를 제공합니다. 디버거는 실행 중인 스크립트를 행별로 검사할 수 있게 해주는 도구입니다. 디버거가 감시, 스택 호출, 중단점출력 창에 표시하는 데이터를 보면서 스크립트를 검사할 수 있습니다.

Studio의 디버거

디버거를 비활성화했다가 다시 활성화하려면 Studio 설정 메뉴를 열고 디버거 활성화됨 설정을 토글한 다음 Studio를 다시 시작하세요.

Studio 설정에서 디버거 활성화

일반적인 워크플로

체험에서 문제를 발견했거나 체험이 의도한 대로 작동하는지 확인하고 싶은 경우에는 다음과 같이 연관된 코드를 디버그할 수 있습니다.

  1. 검사하려는 코드 행에 중단점을 삽입합니다.

  2. 스크립트 탭에서 테스트 탭의 플레이 또는 실행을 클릭하여 플레이테스트 세션(디버깅 세션이라고도 함)을 시작합니다.

    스크립트 탭 플레이테스트 옵션
  3. 스크립트가 중단점에 이르면 플레이테스트 세션이 일시 정지합니다. 코드를 살펴보세요. 감시, 스택 호출출력 창을 검사하면 문제를 진단하고 이해하는 데 도움이 됩니다.

  4. 아직 실행되지 않은 코드 행에 추가 중단점을 삽입하여 추가로 데이터를 검사합니다. 더 이상 필요 없는 중단점은 비활성화하거나 삭제합니다.

  5. 스크립트 탭에서 중지를 클릭하여 디버깅 세션을 종료합니다.

    테스트 및 중지 버튼을 보여주는 스크립트 탭

문제를 해결하거나 근본 원인을 찾을 때까지 앞의 단계를 반복하세요. 일반적인 워크플로를 배우시면 특정한 조건이 충족될 때만 중단되고, 출력 창에 메시지를 표시하며, 클라이언트 또는 서버에서만 실행되도록 중단점을 구성할 수 있습니다. 자세한 내용은 중단점 구성에서 확인하세요.

중단점 삽입

중단점은 특정 행에서 스크립트 실행을 일시 정지 또는 '중단'하는 체크포인트입니다. 일시 정지를 사용하여 체험을 검사 및 디버그하고, 변수를 감시하며, 스택 호출을 검사할 수 있습니다. 중단점은 기능을 디버그하는 가장 효과적인 방법 중 하나이므로 가장 중요한 디버깅 도구 중 하나라고 할 수 있습니다. 실행 가능한 코드의 어떤 행에든 중단점을 삽입할 수 있습니다.

코드 행에 표준 중단점을 삽입하려면 행 번호의 오른쪽 여백을 마우스 왼쪽 버튼으로 클릭하세요. 여백을 마우스 오른쪽 버튼으로 클릭하고 중단점 삽입을 클릭할 수도 있습니다. 중단점이 빨간색 점으로 나타납니다. 비활성화하려면 이 점을 클릭하세요.

빨간색 점으로 표시된 거터의 중단점

코드 살펴보기

스크립트에서 행에 중단점을 삽입하면 스크립트가 이 행을 실행하기 전에 일시 정지합니다. '디버거'라 불리는 노란색 화살표가 다음에 실행될 코드 행을 표시해 줍니다.

디버거에서 실행 중인 중단점이 노란색 화살표 표시

스크립트가 일시 정지하면 스크립트 탭의 각 버튼으로 검토하면서 한 번에 행 하나씩 다음 코드를 실행하세요. 이러한 버튼은 스택 호출 창의 왼쪽 상단 모서리에도 표시됩니다. 코드를 하나씩 살펴보면서 현재 행이 실행될 때 체험이 어떻게 변경되는지 모니터링하세요.

디버거 섹션에 초점을 맞춘 스크립트 탭

아래 표에는 코드를 단계별로 살펴보는 세 가지 방법이 간략하게 나와 있습니다. 중단점에 이른 후에 계속해서 코드를 실행하려면 스크립트 탭에서 다시 시작을 클릭하세요.

버튼작업단축키설명
코드 행을 시작하기 위한 버튼한 단계씩 실행F11한 단계씩 실행 버튼은 디버거를 현재 행의 함수 코드로 옮겨줍니다. 현재 행에 함수가 없을 경우, 디버거는 다음 행으로 이동합니다.
코드 행의 단위 실행을 위한 버튼단위 실행F10단위 실행 버튼은 디버거를 함수로 이동하지 않고 코드의 다음 행으로 이동합니다.
코드 행에 대한 단계 출력을 위한 버튼단계 출력Shift + F11단계 출력 버튼은 함수 호출 후 디버거가 현재 함수에서 나와 코드의 다음 행으로 이동하도록 합니다. 현재 행이 함수 내에 있지 않으면 디버거는 다음 행으로 이동합니다.

코드 검사하기

플레이테스트 도중 중단점이 체험을 일시 정지하면 감시 창, 스택 호출 창, 출력 창 및 스크립트 편집기를 검사하여 변수 값과 함수 실행에 대한 정보를 확인해 보세요. 이러한 정보를 통해 체험의 문제에 대한 근본 원인을 찾을 수 있습니다.

감시 창에서

감시 창에는 변수 탭과 내 감시 탭이 있습니다. 변수 탭은 범위 내 현재 변수에 대한 정보를 보여주고, 내 감시 탭은 여러분이 정의하는 변수 또는 표현식의 값을 보여줍니다. 두 개 탭 모두 행이 실행되기 전에 정보를 표시합니다.

변수 탭에는 다음과 같은 열이 있습니다.

  • 이름 - 변수의 명시된 이름입니다.
  • 범위 - 변수의 범위입니다. 즉, 지역, 전역 또는 외부 지역(Upvalue) 변수 등과 같이 변수를 어디서 '보고' 액세스할 수 있는지 나타냅니다.
  • 값 - 변수의 현재 값입니다.
  • 데이터 형식 - 변수의 데이터 형식입니다.

내 감시 탭에는 다음과 같은 열이 있습니다.

  • 표현식 - 감시하려는 표현식입니다.
  • 값 - 표현식의 현재 값입니다.
  • 데이터 형식 - 표현식의 데이터 형식입니다.

변수 탭에서는 필터 아이콘을 클릭하여 변수의 범위를 필터링할 수 있습니다. 또한 정렬하려는 열의 이름을 클릭하여 행을 정렬할 수도 있습니다. 감시 창에서는 표를 확장하거나 축소해서 표시할 수 있습니다.

변수 값이 들어 있는 감시 창

감시 창에서 코드를 검사하려면 다음을 수행하세요.

  1. 감시 창이 열려있지 않으면 감시보기 탭에서 감시를 클릭합니다.

  2. 플레이테스트 세션이 중단점에서 일시 정지하면 해당 스크립트에서 현재 행이 변수들의 값을 어떻게 변경했으면 하는지 생각해 봅니다.

  3. 코드를 하나씩 살펴보면서 변수의 값이 변수 탭에서 어떻게 변하는지 확인합니다. 표현식을 변수 탭이 아닌 곳에서 보고 싶다면 내 감시 탭을 엽니다. 표현식 열의 빈 행을 클릭한 다음 표현식을 입력합니다. 변수를 스크립트 편집기에서 보고 싶다면 변수 이름을 두 번 클릭하고 마우스 오른쪽 버튼으로 클릭한 다음 감시 추가를 클릭하세요.

  4. 기대하는 변수 및 표현식의 값을 감시 창에 나오는 값과 비교합니다. 변수가 실제로 변경되는 방식이 기대하는 방식과 다르면 변수 또는 변수와 상호 작용하는 함수로 인해 문제나 버그가 발생하는 것일 수 있습니다.

스택 호출 창에서

스택 호출 창은 디버거가 중단점에 이르렀을 때 다음에 어떤 코드 행이 실행되는지 보여줍니다. 스택 호출은 어떤 행의 함수를 호출하는지 표시하고, 다른 함수의 함수를 호출하는 경우에는 함수 호출의 순서와 그 다른 함수의 행을 표시합니다. 스택 호출의 최상단 함수가 마지막으로 호출되어 제일 먼저 실행될 함수입니다. 스택 호출은 스크립트의 함수 호출 순서가 본인이 생각하는 함수 호출 방식과 일치하는지 확인하는 데 사용할 수 있습니다.

Studio의 스택 호출

여러 스크립트에 다수의 중단점이 있을 경우, 플레이테스트 세션이 동시에 일시 정지할 수 있습니다. 스택 호출 창에서 스크립트 이름 옆의 화살표를 클릭하여 중단점으로 이동할 수 있습니다. 다시 시작을 클릭하면 동시에 일시 정지된 모든 중단점에 대해 단위 실행을 할 수 있습니다.

중단점이 여러 개인 스택 호출

디버깅 세션 도중 스택 호출 창에서 코드를 검사하려면 다음을 수행하세요.

  1. 호출 스택 창이 열리지 않으면 보기 탭에서 호출 스택을 클릭합니다.

  2. 체험이 중단점에서 일시 정지하면 해당 스크립트에서 기대하는 함수 호출 순서에 대해 생각해 보세요.

    함수 2개와 중단점 1개를 보여주는 스크립트 편집기
  3. 스택 호출이 함수 호출 순서를 보여줍니다. 중단점이 함수 내에 있는 경우, 스택 호출은 어떤 함수가 해당 함수를 호출하는지도 보여줘요(있는 경우). 스택 호출은 또한 각 함수의 이름과 행 번호도 표시합니다. 함수의 행을 클릭하면 해당 위치로 이동합니다.

    스택 호출에서 클릭하여 행으로 이동
  4. 앞의 2단계에서 생각했던 함수 호출 순서와 3단계의 실제 순서를 비교해 보세요. 여기에 차이점이 있으면 기대하는 코드 작동 방식과 실제 작동 방식 간에 차이가 있어 잠재적 문제와 버그가 발생하는 것입니다.

출력 창에서

보기 탭에서 액세스할 수 있는 출력 창에는 실행 중인 스크립트에서 캡처한 오류, Roblox 엔진의 메시지, 로그 지점의 로그 메시지, print() 호출 시 메시지, warn() 호출 시 오류 등이 표시됩니다. 출력 창에 대한 보다 자세한 내용과 사용자 정의 방법은 출력에서 확인하세요.

스크립트 편집기에서

디버거는 스크립트 편집기와 통합됩니다. 스크립트의 중단점에서 체험이 일시 정지하면 변수 이름 위로 마우스를 가져가 해당 값을 볼 수 있습니다. 예를 들어, 다음과 같이 함수 호출에서 인수로 전달하는 표의 값을 볼 수 있습니다.

스크립트 편집기에서 변수 위로 마우스를 가져가 값 표시

중단점 구성

중단점을 구성하여 특정한 조건이 충족될 때만 중단되고, 출력 창에 메시지를 표시하며, 클라이언트 또는 서버에서만 실행되도록 할 수 있습니다. 또한 본인에게 필요한 디버깅에 최대한 맞춰 이러한 구성을 혼합할 수도 있습니다.

중단점 편집

플레이테스트 세션 도중을 포함하여 언제든지 중단점 구성을 편집할 수 있습니다. 플레이테스트 세션 도중에 중단점을 편집할 경우, 플레이테스트를 완료한 후에도 편집한 내용이 유지됩니다. 플레이테스트 세션을 현재 일시 정지하고 있는 중단점도 편집할 수 있지만, 다음 플레이테스트 세션까지 변경 사항이 적용되지 않습니다.

중단점 구성을 편집하려면 다음을 수행하세요.

  1. 중단점을 마우스 오른쪽 버튼으로 클릭한 다음 중단점 편집을 클릭합니다.

    Studio에서 마우스 오른쪽 버튼을 클릭하여 중단점 편집
  2. 중단점 편집 창에서 중단점을 원하는 대로 구성합니다.

    Studio의 중단점 편집 창

조건문, 로그 메시지, 옵션

각 중단점에 대해 조건문, 로그 메시지, 실행 계속, 컨텍스트 등을 설정할 수 있습니다.

조건문은 중단점이 활성화될지 여부를 결정하는 표현식이에요. 조건문은 선택 사항입니다. 조건문이 비어 있으면 중단점은 항상 활성화돼요. 조건문이 존재할 경우에는 이 조건문이 참일 때만 중단점이 활성화됩니다. 예를 들어, 변수 n42일 때만 중단점이 활성화되도록 하려면 조건문을 n == 42로 설정하세요. 특정 변수가 특정 값을 가질 때 함수가 어떻게 실행되는지 디버깅하려는 경우 또는 반복문에서 특정 실행에서만 중단하고 싶은 경우 조건문이 아주 유용합니다.

로그 메시지는 조건이 참일 때 출력 창에 표시되는 표현식입니다. 로그 메시지의 형식은 print() 명령문의 인수와 같습니다. 예를 들어, 로그 메시지를 "The value of n:", n으로 설정하면 print("The value of n:", n)과 똑같은 메시지가 표시됩니다. print 명령문과 달리 로그 메시지는 실행을 중단할 필요 없이 추가하거나 삭제할 수 있습니다.

실행 계속 옵션은 중단점이 활성화될 때 스크립트를 일시 정지할지 여부를 결정합니다. 이 옵션은 실행을 중단하지 않고 변수 또는 표현식의 값을 기록하려는 경우 유용합니다. 기본적으로 이 옵션은 비활성화되어 있습니다.

중단점의 컨텍스트는 중단점이 클라이언트, 서버 또는 편집 중 어디에서 활성화되어야 하는지 결정합니다. 컨텍스트가 클라이언트인 경우, 중단점은 클라이언트 측 스크립트에서 트리거됩니다. 컨텍스트가 서버인 경우, 중단점은 서버 측 스크립트에서 트리거됩니다. 컨텍스트가 편집인 경우에는 플러그인을 디버그하실 때 중단점이 트리거됩니다. 사용자 지정 컨텍스트를 클릭하면 창이 현재 컨텍스트를 보여줍니다.

사용자 지정 컨텍스트를 보여주는 중단점 편집 창

조건부 중단점 및 로그 지점

Studio에서는 중단점을 더 간편하게 삽입할 수 있도록 이름을 붙인 여러 변종을 제공합니다. 이름을 붙인 변종을 삽입하려면 행 번호 오른쪽의 여백을 마우스 오른쪽 버튼으로 클릭한 다음 삽입하려는 변종을 클릭하세요.

마우스 오른쪽 버튼을 클릭하여 중단점 삽입

조건부 중단점조건문이 있고 실행 계속이 비활성화된 중단점입니다. 조건부 중단점은 조건이 참일 때만 스크립트를 일시 정지하므로, 특정 변수가 특정 값을 가질 때 함수가 어떻게 실행되는지 디버깅하는 데 유용합니다. 조건부 중단점은 행이 실행되기 전에 변수의 값을 사용합니다. 조건부 중단점을 삽입하면 간편하게 설정하실 수 있도록 커서가 조건문에 초점을 맞춥니다.

로그 지점로그 메시지가 있고 실행 계속이 활성화된 중단점입니다. 로그 지점은 스크립트를 일시 정지하지 않고 출력 창에 로그 메시지를 표시하므로 변수 값을 디버깅하는 데 유용합니다. 로그 지점은 행이 실행되기 전에 변수의 값을 사용합니다. 로그 지점을 삽입하면 간편하게 설정하실 수 있도록 커서가 로그 메시지에 초점을 맞춥니다.

로그 지점은 실행 중인 플레이테스트 세션을 중단하거나 다시 시작하지 않고도 출력 창에 로그 메시지를 기록할 수 있기 때문에 print() 명령문보다 변수 디버깅에 훨씬 더 효율적입니다. print() 명령문에 비해 로그 지점은 디버깅하는 동안 코드를 깨끗하게 유지해 주고 디버깅을 완료한 후 삭제하기도 더 쉽습니다.

중단점 비활성화

중단점을 비활성화하고 다시 활성화하는 방법에는 다음과 같이 여러 가지가 있습니다.

  • 중단점의 아이콘을 클릭합니다.
  • 중단점을 편집하고 활성화됨 체크 상자를 토글합니다.
  • 중단점 아이콘을 마우스 오른쪽 버튼으로 클릭하고 중단점 비활성화 또는 중단점 활성화를 클릭합니다.

중단점 삭제

중단점을 삭제하려면 중단점 아이콘을 마우스 가운데 버튼으로 클릭합니다. 또는 아이콘을 마우스 오른쪽 버튼으로 클릭하고 중단점 삭제를 클릭해도 됩니다.

중단점 창

중단점 창에는 체험에 있는 모든 중단점이 표시됩니다. 중단점 창을 열려면 Studio 상단에서 보기 탭을 클릭한 다음 중단점을 클릭하세요.

Studio의 중단점 창

중단점 창에는 레이블 없는 열과 스크립트, 행, 소스 행, 조건문, 로그 메시지 및 실행 계속 열이 있습니다. 레이블 없는 열과 스크립트 및 행 열은 항상 표시되지만, 다른 열은 창의 오른쪽 상단 모서리에서 점 3개를 클릭하여 토글할 수 있습니다.

레이블 없는 열에서 (x3) 레이블은 동일한 코드 행에 있는 중단점의 수를 나타내고, 아이콘은 중단점 구성을 나타냅니다. 동일한 행의 중단점은 동일한 조건문, 로그 메시지 및 실행 계속을 공유하지만, 컨텍스트는 달라요. 중단점의 구성은 중단점 창에서 편집하실 수 있습니다. 예를 들어, 조건문 열에서 텍스트 입력 영역을 편집하여 중단점의 조건문을 편집할 수 있습니다.

중단점 창에서 중단점의 조건문 편집

활성화됨 열에서 중단점 아이콘을 클릭하여 중단점을 활성화하고 비활성화할 수 있습니다. 또한 다음과 같은 버튼을 클릭하여 일부 또는 모든 중단점을 활성화, 비활성화 및 삭제하실 수 있습니다.

버튼작업
모든 중단점을 비활성화하는 버튼모든 중단점을 비활성화합니다. 비활성화된 중단점이 하나라도 있으면 모두 활성화합니다.
모든 중단점을 삭제하는 버튼모든 중단점을 삭제합니다.

중단점 아이콘

중단점의 아이콘은 활성화되었는지, 조건문이 있는지, 그리고 로그 메시지가 있는지에 따라 달라집니다. 로그 메시지가 있는 중단점은 조건문이 있는지에 상관없이 로그 지점으로 나타납니다.

이름아이콘활성화됨조건문로그 메시지
중단점아니요아니요
아니요아니요아니요
조건부 중단점아니요
아니요아니요
로그 지점아마도
아니요아마도

추가 디버깅 도구

디버거 이외에도, Studio는 체험의 문제와 버그를 수정하실 수 있도록 다른 디버깅 도구를 추가로 제공합니다.

명령 모음

명령 모음을 사용하면 체험을 실행하는 동안 Luau 명령을 실행할 수 있습니다. Studio의 보기 탭이나 개발자 콘솔을 통해 사용할 수 있습니다.

개발자 콘솔

개발자 콘솔은 클라이언트 및 서버 출력, 메모리 사용량, 네트워크 성능 등 다양한 상세 정보를 제공합니다. 체험을 테스트하거나 플레이하는 동안 개발자 콘솔을 열려면 대화창에 /console을 입력하거나 F9를 누르세요. 자세한 내용은 개발자 콘솔에서 확인하세요.

로그 파일

Studio 또는 플레이어 앱에서 스크립트 실행 시 출력 메시지가 생성되거나 오류가 발생할 경우, 앱은 로컬 파일 시스템의 로그 파일에 이 메시지를 기록합니다. 이러한 파일은 운영 체제에 따라 보관되는 위치가 다릅니다.

  • Windows에서는 로그 파일이 %LOCALAPPDATA%\Roblox\logs 디렉토리에 위치합니다. 수정된 날짜별로 폴더를 정렬하세요. 로그 파일의 이름은 log_XXXXX 형식으로 시작합니다. XXXXX 값이 동일한 로그는 동일한 Studio 세션에서 온 것입니다.
  • macOS에서는 로그 파일이 ~/Library/Logs/Roblox 디렉토리에 위치합니다. Finder에서 이동 메뉴를 클릭하고 폴더로 이동을 선택한 다음 해당 디렉토리에 입력하고 확인합니다.