Version: 2020.2
통합 개발 환경(IDE) 지원
Unit Testing

Unity에서 C# 코드 디버깅

디버거를 사용하면 애플리케이션이나 게임 실행 중 소스 코드를 검사할 수 있습니다. Unity에서는 다음의 코드 에디터를 사용하여 C# 코드를 디버깅할 수 있습니다.

  • Visual Studio(Unity용 Visual Studio Tools 플러그인 사용)

  • Mac용 Visual Studio

  • Jetbrains Rider

  • Visual Studio Code

각 코드 에디터에서 지원되는 디버거 기능은 약간 다를 수 있으나, 브레이크 포인트, 싱글 스테핑, 변수 검사와 같은 기본 기능은 공통적으로 제공됩니다.

Unity의 관리되는 코드 디버깅은 WebGL을 제외한 모든 플랫폼에서 작동하며, Mono 및 IL2CPP 스크립팅 백엔드와 함께 작동합니다.

코드 에디터 설정

Visual Studio(Windows)

Unity 에디터 설치 프로그램은 Unity용 Visual Studio Tools 플러그인을 사용하여 Visual Studio를 설치할 수 있는 옵션을 포함합니다. 이 옵션은 Unity에서 디버깅을 위해 Visual Studio를 설정하는 경우 권장되는 방법입니다.

컴퓨터에 이미 Visual Studio가 설치되어 있으면 Tools > Extensions and Updates 메뉴를 사용하여 Unity용 Visual Studio Tools 플러그인을 찾아 설치하십시오.

Mac용 Visual Studio

Unity 에디터 설치 프로그램은 Mac용 Visual Studio를 설치할 수 있는 옵션을 포함합니다. 이 옵션은 Unity에서 디버깅을 위해 Mac용 Visual Studio를 설정하는 경우 권장되는 방법입니다.

컴퓨터에 이미 Mac용 Visual Studio가 설치되어 있으면 확장 프로그램 관리자를 사용하여 Unity용 Visual Studio Tools 플러그인을 찾아 설치하십시오.

Jetbrains Rider

JetBrains Rider의 기본 설치 버전을 이용하여 Windows 또는 Mac용 Unity에서 코드를 디버깅할 수 있습니다. JetBrains 웹사이트를 방문하여 설치하십시오.

VS Code

VS Code의 경우 확장자를 설치해야 Unity에서 코드를 디버깅할 수 있습니다. 설치하려면 이 확장자에 관한 지침을 따르십시오.

Specifying the External Script Editor in Unity

Once you’ve installed a code editor, go to Preferences > External Tools and set the External Script Editor to your chosen code editor.

에디터에서 디버깅

You can debug C# code that is running in the Unity Editor while the Unity Editor is in Play Mode.

To debug in the Editor, you need to set the Editor’s Code Optimization mode to Debug Mode, then you can attach a code editor with a debugging feature.

To change the Code Optimization mode, select the Debug Button in the bottom right of the Unity Editor Status Bar.

The Debug Button in the bottom right of the Unity Editor Status Bar
The Debug Button in the bottom right of the Unity Editor Status Bar

Unity’s Code Optimization setting has two modes.

  • Debug Mode, which you can use to attach external debugger software, but gives slower C# performance when you run your Project in Play Mode in the Editor.
  • Release Mode, which gives faster C# performance when you run your Project in Play Mode in the Editor, but you cannot attach any external debuggers.

When you click the Debug button in the status bar, a small pop-up window opens which contains a button you can use to switch modes. It also displays information about the current mode, and describes what happens if you switch modes.

The Debug Mode popup, which shows the current mode, allows you to switch modes, and describes what happens if you switch mode.
The Debug Mode popup, which shows the current mode, allows you to switch modes, and describes what happens if you switch mode.

To change which mode the Unity Editor starts up in, go to Edit > Preferences > General > Code Optimization On Startup.

In Preferences, you can change the Code Optimization mode that Unity starts in.
In Preferences, you can change the Code Optimization mode that Unity starts in.

To control these settings via a script, use the following API: ManagedDebugger, Compilation.CompilationPipeline-codeOptimization, and Compilation.CodeOptimization.

You can also override the mode that the Editor starts up in, or turn off the debugger listen socket. To do this, use the following command line arguments when you launch the Editor:

  • -releaseCodeOptimization Starts the Editor in release code optimization mode.
  • -debugCodeOptimization Starts the Editor in debug code optimization mode.
  • -disableManagedDebugger Starts the Editor with the debugger listen socket disabled.

Setting breakpoints and attaching to the Editor

In your external code editor, set a breakpoint in the code editor on a line of script code where the debugger should stop. For example, in Visual Studio, click on the column to the left of your code, on the line you want to stop the debugger (as shown below). A red circle appears next to the line number and the line is highlighted.

A breakpoint set in Visual Studio
A breakpoint set in Visual Studio

다음으로 Unity 에디터에 코드 에디터를 연결합니다. 이 옵션은 코드 에디터에 따라 다르며, 코드 에디터의 일반적인 디버그 과정과는 별개의 옵션입니다. Visual Studio의 경우 이 옵션은 다음과 같이 표시됩니다.

The Attach To Unity button in Visual Studio
The Attach To Unity button in Visual Studio

일부 코드 에디터에서 디버깅할 Unity 인스턴스를 선택할 수 있습니다. 예를 들어 Visual Studio의 경우 Debug > Attach Unity Debugger 옵션에 해당 기능이 노출됩니다.

Visual Studio listing the current instances of Unity available to debug. In this example, there is one instance running in the Editor and one instance running as an Android Plyaer
Visual Studio listing the current instances of Unity available to debug. In this example, there is one instance running in the Editor and one instance running as an Android Plyaer

코드 에디터를 Unity 에디터에 연결한 후 Unity 에디터로 돌아가 Play 모드로 전환합니다. 브레이크 포인트의 코드가 실행되면 디버거가 다음 예와 같이 중지됩니다.

The debugger in Visual Studio when it has stopped at a breakpoint
The debugger in Visual Studio when it has stopped at a breakpoint

코드 에디터가 브레이크 포인트에 있을 때에는 변수의 콘텐츠를 단계별로 확인할 수 있습니다. Unity 에디터는 디버거에서 Continue 옵션을 선택하거나 디버깅 모드를 중지할 때까지 반응하지 않습니다.

플레이어에서 디버깅

Unity 플레이어에서 실행되는 스크립트 코드를 디버깅하려면 플레이어를 빌드하기 전에 File > Build Settings 에 위치한 “Development Build” 및 “Script Debugging” 옵션을 활성화하십시오. 플레이어가 스크립트 코드를 실행하기 전에 디버거가 연결되기를 기다리게 하려면 “Wait For Managed Debugger” 옵션을 활성화하십시오.

Unity 플레이어에 코드 에디터를 연결하려면 IP 주소나 컴퓨터 이름 및 플레이어 포트를 선택합니다. Visual Studio의 "Attach To Unity" 옵션의 드롭다운 메뉴는 다음과 같이 표시됩니다.

Debug > Attach Unity Debugger 옵션은 다음과 같이 표시됩니다.

Unity 에디터와 플레이어가 모두 실행 중인 경우, 반드시 디버거를 Unity 에디터가 아닌 플레이어에 연결하십시오. 디버거를 연결한 후 정상적으로 디버깅을 진행할 수 있습니다.

Android 및 iOS 기기에서 디버깅

Android

Android 기기에서 실행되는 플레이어를 디버깅하는 경우 USB나 TCP를 통해 기기에 연결하십시오. 예를 들어, Visual Studio(Windows)에서 Android 기기에 연결하려면 Debug > Attach Unity Debugger 옵션을 선택합니다. 그러면 플레이어 인스턴스를 실행하는 기기 목록이 표시됩니다.

이 경우 휴대폰이 USB와 Wi-Fi를 통해 Unity 에디터와 Visual Studio를 실행하는 워크스테이션과 동일한 네트워크에 연결되어 있습니다.

iOS

iOS 기기에서 실행되는 플레이어를 디버깅하는 경우 TCP를 통해 기기에 연결하십시오. 예를 들어, Visual Studio(Mac)에서 iOS 기기에 연결하려면 Debug > Attach Unity Debugger 옵션을 선택합니다. 그러면 플레이어 인스턴스를 실행하는 기기 목록이 표시됩니다.

기기에서 활성화된 네트워크 인터페이스가 하나뿐이며(Wi-Fi 권장, 셀룰러 데이터 끌 것) IDE와 기기 간 TCP 포트를 차단하는 방화벽이 없는지 확인하십시오(위 스크린샷의 포트 번호 56000). iOS에서는 USB를 통한 디버깅이 지원되지 않습니다.

디버거 문제 해결

디버거에 관한 대부분의 문제는 코드 에디터가 Unity 에디터나 플레이어를 찾을 수 없어서 발생합니다. 이 경우 코드 에디터가 디버거를 제대로 연결할 수 없습니다. 디버거는 에디터나 플레이어에 대해 TCP 연결을 사용하므로, 대부분의 경우 네트워크가 연결 문제의 원인입니다. 다음은 기본적인 연결 문제를 해결할 수 있는 몇 가지 조치입니다.

올바른 Unity 인스턴스에 디버거를 연결했는지 확인

디버깅이 활성화된 로컬 네트워크의 모든 Unity 에디터나 Unity 플레이어에 코드 에디터를 연결할 수 있습니다. 디버거를 연결할 때에는 올바른 인스턴스에 연결했는지 확인하십시오. Unity 플레이어를 실행 중인 기기의 IP 주소나 컴퓨터 이름을 알면 올바른 인스턴스를 찾는 데 도움이 됩니다.

Unity 인스턴스에 대한 네트워크 연결 확인

코드 에디터는 Unity 프로파일러가 사용하는 메커니즘과 동일한 메커니즘을 사용하여 디버깅할 Unity 인스턴스를 찾습니다. 코드 에디터가 대상 Unity 인스턴스를 찾지 못하는 경우 Unity 프로파일러를 해당 인스턴스에 연결해 보십시오. Unity 프로파일러 역시 대상 Unity 인스턴스를 찾지 못한다면 코드 에디터를 실행 중인 컴퓨터나 Unity 인스턴스를 실행 중인 컴퓨터(또는 둘 다)에 방화벽이 존재할 수 있습니다. 방화벽이 있는 경우 아래의 방화벽 설정에 관한 내용을 확인하십시오.

기기에서 네트워크 인터페이스가 1개만 활성화되었는지 확인

많은 기기에는 여러 개의 네트워크 인터페이스가 있습니다. 예를 들어 휴대폰에는 활성화된 셀룰러 연결과 활성화된 Wi-Fi 연결이 모두 있습니다. 디버거를 TCP에 제대로 연결하려면 IDE가 기기의 올바른 인터페이스에 네트워크를 통해 연결해야 합니다. 예를 들어 Wi-Fi를 통해 디버깅하려는 경우 기기에 에어플레인 모드를 설정하여 다른 모든 인터페이스를 비활성화한 다음 Wi-Fi를 활성화하십시오.

플레이어 로그에서 Unity 플레이어가 IDE에 사용하도록 명령하는 IP 주소를 지정할 수 있습니다. 다음 로그 부분을 확인하십시오.


Multi-casting "[IP] 10.0.1.152 [Port] 55000 [Flags] 3 [Guid] 2575380029 [EditorId] 4264788666 [Version] 1048832 [Id] iPhonePlayer(Joshs-iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer" to [225.0.0.222:54997]...

이 메시지는 IDE가 IP 주소 10.0.1.152와 포트 56000을 사용하여 기기 연결을 시도함을 나타냅니다. 이 IP 주소와 포트는 IDE를 실행하는 컴퓨터에서 도달할 수 있어야 합니다.

방화벽 설정 확인

Unity 인스턴스는 TCP 연결을 통해 코드 에디터와 통신합니다. 대다수 Unity 플랫폼의 경우 이 TCP 연결은 임의로 선택된 포트에서 진행됩니다. 보통 코드 에디터가 포트를 자동으로 감지하므로 이 포트를 알아두어야 할 필요는 없습니다. 이 프로세스가 제대로 작동하지 않는 경우 네트워크 분석 툴을 사용하여 코드 에디터를 실행한 컴퓨터나 Unity 인스턴스를 실행한 컴퓨터 또는 기기에서 차단된 포트를 확인하십시오. 포트를 찾았다면 방화벽이 코드 에디터를 실행하는 컴퓨터와 Unity 인스턴스를 실행하는 컴퓨터의 포트 모두에 대한 액세스를 허용하는지 확인하십시오.

관리되는 디버깅 정보를 사용할 수 있는지 확인

If the debugger does attach, but breakpoints don’t load, the debugger may not be able to locate the managed debugging information for the code. Managed code debugging information is stored in files named .pdb, next to the managed assembly (.dll file) on disk.

When the correct preferences and build options are enabled (see above, Unity will generate this debugging information automatically. However, Unity cannot generate this debugging information for managed plugins in the Project. It is possible to debug code from managed plugins if the associated .pdb files are next to the managed plugins in the Unity project on disk.

기기 잠금 방지

애플리케이션을 디버깅하기 위해 사용하는 기기에 잠금 화면이 있는 경우 비활성화되어 있는지 확인해야 합니다. 잠금 화면은 디버거의 연결을 해제하고 재연결을 막습니다. 따라서 관리되는 코드 디버깅이 진행되는 동안에는 화면을 잠그지 않는 것이 좋습니다. 화면이 잠기는 경우 기기의 애플리케이션을 재시작해야 디버거가 재연결을 시도할 수 있습니다.

  • 2018–09–06 페이지 게시됨

  • 2018.2에 관리되는 코드 디버깅 추가됨

통합 개발 환경(IDE) 지원
Unit Testing