Version: 2022.3
언어: 한국어
Windows용 Visual Studio 프로젝트 생성
Windows 무결성 제어

Windows 디버깅

Unity는 게임 및 에디터 프로세스의 분석이나 라이브 디버깅을 위해 Windows에서의 여러 디버깅 옵션을 제공합니다.Unity는 네이티브 C++ 디버깅과 C# 관리 디버깅의 두 가지 디버깅 타입을 지원합니다.

  • 네이티브 디버깅은 exe 및 dll과 같은 관련 바이너리 파일에 대해 프로그램 데이터베이스(PDB)에 심볼을 저장합니다.
  • Windows에서 표준 .NET 관리 심볼은 .pdb 확장자를 가진 PDB 파일에 저장됩니다.

심볼

Unity의 심볼 스토어를 사용하여 Windows 디버거(WinDbg)의 Unity 서버 URL에 액세스하거나 Visual Studio 2019 이상을 사용하여 심볼을 자동으로 확인하고 다운로드할 수 있습니다.

Windows 디버거(WinDbg) 설정

심볼 스토어를 WinDbg에 추가하려면 .sympath 커맨드를 사용하십시오.

.sympath+ SRV*c:\\symbols-cache*http://symbolserver.unity3d.com/

여기에서

.sympath+ +를 추가하면 존재하는 심볼 경로를 유지한 채 심볼 스토어 룩업을 추가합니다.

SRV*c:\symbols-cache SRV는 데이터를 가져오는 외부 서버를 지정합니다. 반면 c:\symbols는 다운로드된 심볼을 임시 저장하는 로컬 경로를 지정하며, 다운로드를 실행하기 전에 필요한 심볼이 없는지 이 경로를 먼저 확인합니다.

*http://symbolserver.unity3d.com/ 데이터를 가져올 심볼 스토어 경로입니다.

Visual Studio 설정

디버깅을 위해 Visual Studio를 설정하려면 다음 단계를 따르십시오. 1. Tools > Options로 이동합니다. 2. Debugging 섹션을 확장한 후 Symbols를 선택합니다. 3. 캐시 디렉토리를 지정하지 않은 경우 지정합니다. 4. Unity의 심볼 스토어와 같은 심볼 파일(.pdb) 위치를 추가합니다.

라이브 디버깅

라이브 디버깅은 이미 실행 중인 프로세스 또는 예외가 발견된 프로세스에 디버거를 연결하는 시나리오입니다.디버거가 문제를 발견하려면 Visual Studio 설정 섹션에 설명된 단계를 통해 심볼을 빌드에 포함해야 합니다.또한 게임 실행 파일의 이름이 게임 이름과 동일한 경우 디버거가 올바른 .pdb 파일을 찾는 데 문제가 발생할 수 있으며, 특히 이름이 변경된 실행 파일에 대한 액세스 권한이 없는 경우 더욱 그렇습니다.

자동 예외 디버깅 설정

Windows에서 Microsoft는 애플리케이션 크래시가 발생하는 경우 자동으로 Dr Watson이나 Microsoft에 오류 보고를 전송하도록 설정합니다.하지만 Visual Studio나 WinDbg가 설치되어 있는 경우, Microsoft는 대신 크래시 디버그를 할 수 있는 옵션을 제공합니다.

다음 레지스트리 파일 콘텐츠에 따라 설치하십시오. Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug] "Auto"="1" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug] "Auto"="1"

에디터 디버깅에 아래 콘텐츠를 추가합니다.

Unity.exe -dbgbreak
자동 크래시 처리가 설정된 경우 Unity를 실행한 후 즉시 디버거가 연결되도록 할 것입니다.

사후/분석 디버깅

Windows는 크래시 덤프 파일(.dmp 또는 .mdmp)을 조사할 수 있는 기능을 제공합니다.크래시 덤프에 따라 데이터 스택 정보나 전체 프로세스 메모리가 표시될 수 있습니다.덤프 파일의 콘텐츠에 따라 크래시의 원인이 결정되며, 일반적으로 조사할 스택이 하나 이상 있습니다(유효한 스택인 경우).

덤프 파일을 조사하려면 Visual Studio나 WinDbg를 통해 로드합니다.Visual Studio은 사용하기 쉬운 반면, WinDbg는 추가 기능을 제공하므로 디버깅 툴로 선호됩니다.

디버깅 힌트와 요령

Visual Studio를 실행할 때 Unity의 VS 코드용 UnityMixedCallstack 확장자를 사용하면 디버깅이 훨씬 더 쉬워집니다.

네이티브 랜드의 관리 예외

NullReferenceException은 보통 다음과 같은 모습입니다.

    1b45558c()  
    >   mono-2.0-bdwgc.dll!malloc(unsigned int size=12)  Line 163 + 0x5f bytes  C  
        mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232)  Line 204 + 0x7 bytes  C  
        mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c)  Line 4889 + 0xc bytes C

관리 스택 프레임

관리 스택 프레임은 일반적으로 다음과 유사합니다.

    1b45558c()  
    >   mono-2.0-bdwgc.dll!malloc(unsigned int size=12)  Line 163 + 0x5f bytes  C  
        mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232)  Line 204 + 0x7 bytes  C  
        mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c)  Line 4889 + 0xc bytes C

정보가 없는 행은 관리 프레임입니다.스택 프레임의 주소를 수신하여 정보가 포함된 char*를 반환하는 mono_pmip이라는 빌트인 함수를 사용하여 관리 스택 정보를 Mono로 가져올 수 있습니다. 디버깅을 위해 mono_pmip를 Visual Studio Immediate 창에서 호출할 수 있습니다.

?(char*){,,mono-2.0-bdwgc.dll}mono_pmip((void*)0x1b45558c)
0x26a296c0 “ Tiles:OnPostRender () + 0x1e4 (1B4553A8 1B4555DC) [065C6BD0 - Unity Child Domain]”`

참고: 위의 코드는 mono-2.0-bdwgc.dll 심볼이 올바르게 로드된 경우에만 작동합니다.

애플리케이션 덤프(Dumps) 강제 생성

디버거가 연결되었어도 애플리케이션에 크래시가 발생하지 않거나 디버거를 사용할 수 없는 원격 기기에서 크래시가 발생하는 경우가 가끔 있습니다.이러한 경우 다음 단계를 통해 덤프 파일에서 유용한 정보를 가져올 수 있습니다.

참고: 아래 과정은 데스크톱 실행 시 Windows Standalone이나 유니버설 Windows 플랫폼에 모두 적용됩니다.

  1. Windows 레지스트리를 엽니다.
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting으로 이동합니다.
  3. LocalDumps 폴더가 없으면 만듭니다.
  4. 아래의 키를 추가합니다.
    • "DumpFolder"=<FolderPath goes here> , e.g., C:\Temp
    • "DumpCount"=dword:00000010
    • "DumpType"=dword:00000002
  5. 유니버설 Windows 플랫폼이나 Windows Standalone 실행 파일을 통해 애플리케이션을 실행합니다.
  6. 크래시를 재현합니다.앞서 지정한 폴더에 덤프 파일이 생성됩니다.Visual Studio나 WinDbg와 같은 선호하는 디버깅 툴을 사용하여 덤프 파일을 열 수 있습니다.
Windows용 Visual Studio 프로젝트 생성
Windows 무결성 제어