> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Visual Studio를 사용한 XBOX 프로젝트 디버깅

> Visual Studio를 사용한 XBOX 프로젝트 디버깅

Visual Studio 내에서 XBOX Microsoft Game Development Kit(GDK) 프로젝트를 디버깅하는 기능은 Microsoft Game Development Kit(GDK) 설치의 일부로 설치되는 XBOX Debugger 구성 요소에 의해 활성화됩니다. Visual Studio 2019 및 2022가 지원됩니다. XBOX Debugger는 플랫폼이 Gaming.Xbox.One.x64 또는 Gaming.Xbox.Scarlett.x64인 모든 프로젝트의 기본 디버거이며, 아래 스크린샷과 같습니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_gamecore_debugger.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=ae6b86f1e17009d38d4c4fc6d14b645a" alt="Solution Platforms 드롭다운 목록에 Gaming.Xbox.One.x64 및 Gaming.Xbox.Scarlett.x64 플랫폼과 기본 디버거인 XBOX Debugger가 표시된 Visual Studio 표준 도구 모음 스크린샷" width="459" height="155" data-path="images/gdk/tools/vs_debug_gamecore_debugger.png" />

## Visual Studio 디버거 구성

Visual Studio 내에서 F5로 디버거를 실행하면 기본적으로 [XBOX Manager](/tools/tools-console/xbom/xbom)나 [xbConnect](/tools/tools-console/commandlinetools/xbconnect) 같은 다른 Microsoft Game Development Kit(GDK) 도구를 사용해 설정한 기본 콘솔이 사용됩니다. 이 동작을 재정의하려면 다음 스크린샷과 같이 프로젝트 속성 페이지의 **XBOX One** 섹션 아래에 있는 **Remote IP Address** 속성을 사용해 콘솔을 지정하세요.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_remote_ip_property.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=ae62a7abe797ac6f289d9087c0535ef0" alt="Visual Studio 프로젝트의 속성 페이지 대화 상자 XBOX One 섹션에서 콘텐츠 창의 Remote IP Address 속성을 보여주는 스크린샷" width="824" height="560" data-path="images/gdk/tools/vs_debug_remote_ip_property.png" />

Visual Studio의 디버깅 도구 모음에는 F5나 Ctrl-F5로 실행할 때 타이틀이 배포될 콘솔을 나타내는 드롭다운이 포함되어 있습니다. 드롭다운에는 대상 콘솔을 변경해야 할 때 프로젝트 속성 페이지에 빠르게 액세스할 수 있는 버튼이 있습니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_target_device.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=6217d73b3236cc401934f9e15afedec5" alt="Visual Studio의 Target Device 드롭다운" width="448" height="92" data-path="images/gdk/tools/vs_debug_target_device.png" />

디버거는 [XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)에서도 실행할 수 있습니다. 이 경우 사용되는 콘솔은 다음 스크린샷과 같이 XBOX Gaming Explorer 상단의 연결 리본에 식별된 콘솔입니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_explorer.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=10d109c5dfeffb578fbcdbdf1b85551d" alt="XBOX Gaming Explorer 상단의 연결 리본으로 식별된 콘솔에 대한 타이틀 컨텍스트 메뉴에서 강조 표시된 Debug Title 메뉴 항목을 보여주는 Visual Studio의 XBOX Gaming Explorer 스크린샷" width="399" height="448" data-path="images/gdk/tools/vs_debug_explorer.png" />

### 심볼 경로

Visual Studio로 디버깅할 때 사용할 수 있는 여러 Game OS 구성 요소의 Program Database(.pdb) 파일이 있습니다. Visual Studio가 이러한 심볼을 사용하도록 구성하면 예를 들어 디버거로 중단되었을 때 더 완전한 호출 스택을 제공합니다.

일부 Game OS 심볼은 Microsoft Game Development Kit(GDK) 설치 시 개발 PC에 설치되고, 그 외에는 Microsoft 공용 심볼 서버에서 사용할 수 있습니다.

설치 프로그램에서 설치된 Game OS 심볼은 개발 PC의 *C:\Program Files (x86)\Microsoft GDK\<edition number>\GXDK\gameKit\symbols* 에 위치합니다. 플랫폼과 무관한 .pdb는 심볼 폴더의 루트에 있습니다. 플랫폼별 .pdb는 *Xbox Series X|S* 및 *XboxOne* 하위 디렉터리에 있습니다.

로컬 PC의 Game OS 심볼 디렉터리 경로를 추가하려면 다음 스크린샷과 같이 Visual Studio **옵션** 대화 상자의 **디버깅** 섹션 아래에 있는 **Symbols** 설정을 사용하세요.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_symbol_path.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=fe80e85d2b02ca0260c8feca1e66affa" alt="Visual Studio 옵션 대화 상자의 디버깅 섹션 Symbols 창에서 심볼 파일(.pdb) 위치 목록에 Game OS 심볼 경로가 선택된 것을 보여주는 스크린샷" width="753" height="459" data-path="images/gdk/tools/vs_debug_symbol_path.png" />

Microsoft 공용 심볼 서버에서 사용할 수 있는 Game OS 심볼에 액세스하려면 **Symbols** 대화 상자에서 **Microsoft Symbol Servers** 확인란을 선택하세요. Microsoft 심볼 서버를 심볼 파일 위치로 추가하면 Visual Studio가 타이틀이 로드하는 모든 바이너리에 대해 심볼 서버를 검색하도록 합니다. 광범위한 심볼 검색은 시간이 오래 걸릴 수 있습니다. 타이틀이 사용하는 특정 바이너리 집합에 대해서만 .pdb를 찾도록 Visual Studio를 구성하여 이 검색 시간을 줄일 수 있습니다. .pdb를 찾아야 할 바이너리 집합을 지정하려면 **옵션** 대화 상자의 **Load only specified modules** 옵션을 사용하세요. 다음 스크린샷은 선택된 몇 개의 바이너리에 대해서만 공용 심볼 서버에서 심볼을 로드하도록 구성된 Visual Studio를 보여줍니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_symbol_crt_path.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=febcdd7985036eab02a6811025093ed3" alt="Visual Studio 옵션 대화 상자의 디버깅 섹션 Symbols 창에서 Load only specified modules 옵션을 선택하여 표시된 symbols to load automatically 대화 상자 스크린샷" width="989" height="503" data-path="images/gdk/tools/vs_debug_symbol_crt_path.png" />

### 디버깅 관련 속성

디버거는 프로젝트 속성 대화 상자와 [XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)의 **Settings** 탭에 노출된 속성 세트를 통해 추가로 구성할 수 있습니다. 이러한 속성에는 예를 들어 타이틀에 명령줄 인수를 전달하고 로그 모듈 로딩을 켜는 기능이 포함됩니다. 사용 가능한 속성에 대한 자세한 내용은 [XBOX 개발용 Visual Studio 속성](/tools/tools-console/visualstudio/durango-property-pages) 및 [XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)를 참조하세요.

## 실행 중인 타이틀에 연결

XBOX 메뉴와 [XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)에는 콘솔에서 실행 중인 게임에 디버거를 연결하는 메뉴 옵션이 포함되어 있습니다.

기본 콘솔에서 현재 실행 중인 게임에 연결하려면 **XBOX** 메뉴의 **Attach to Running Game**을 사용하세요. **XBOX** 메뉴는 다음 스크린샷과 같이 Visual Studio 메뉴 표시줄에서 액세스할 수 있습니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_attach_menu.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=58844432429dee7528487309508f9a95" alt="Visual Studio 확장 메뉴 아래 XBOX 메뉴에서 Attach to Running Game 메뉴 항목을 보여주는 스크린샷" width="394" height="212" data-path="images/gdk/tools/vs_debug_attach_menu.png" />

[XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)로 추가한 모든 콘솔에서 실행 중인 게임에도 연결할 수 있습니다. **Home** 탭의 **Game Processes** 및 **Titles** 섹션의 컨텍스트 메뉴에는 다음 스크린샷과 같이 실행 중인 게임에 연결하는 메뉴 항목이 포함되어 있습니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_attach_game.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=189224d56291ef162a5308ad7f1000d9" alt="현재 콘솔에 대한 게임 프로세스 컨텍스트 메뉴에서 강조 표시된 Attach 메뉴 항목을 보여주는 Visual Studio의 XBOX Gaming Explorer 스크린샷" width="400" height="301" data-path="images/gdk/tools/vs_debug_attach_game.png" />

**Consoles** 탭의 특정 콘솔에 대한 컨텍스트 메뉴는 다음 스크린샷과 같이 해당 콘솔에서 실행 중인 게임에 연결합니다.

<img src="https://mintcdn.com/microsoft-4404708b/6TXzXmujKayly5Sf/images/gdk/tools/vs_debug_attach_console.png?fit=max&auto=format&n=6TXzXmujKayly5Sf&q=85&s=93ec684a64d492f6aad865b6342d4ec3" alt="콘솔 컨텍스트 메뉴에서 강조 표시된 Attach to Game Process 메뉴 항목을 보여주는 Visual Studio의 XBOX Gaming Explorer Consoles 탭 스크린샷" width="396" height="385" data-path="images/gdk/tools/vs_debug_attach_console.png" />

Visual Studio의 **디버그** 메뉴에 있는 **Attach** 대화 상자를 사용해 실행 중인 타이틀에 연결할 수도 있습니다. Visual Studio 2022를 사용할 때는 **Connection Type** 드롭다운에서 **XBOX Direct Connection**을 선택하고 **Connection Target** 텍스트 상자에 콘솔의 Host IP 주소 또는 System IP 주소를 입력하세요. Host IP 및 System IP 주소는 [xbconnect](/tools/tools-console/commandlinetools/xbconnect) 명령줄 도구를 사용해 확인할 수 있습니다.

<Note>
  Host IP 또는 System IP 주소 중 어느 것으로도 타이틀에 연결할 수 있지만, 단일 세션에서 여러 번 연결할 때는 둘을 혼합하지 마세요. 예를 들어 처음에 Host IP로 연결했다면 이후에도 계속 Host IP를 사용하세요.
</Note>

<img src="https://mintcdn.com/microsoft-4404708b/6TXzXmujKayly5Sf/images/gdk/tools/vs2022_attach_dialog.png?fit=max&auto=format&n=6TXzXmujKayly5Sf&q=85&s=71f8447875f069e11920e2d3a8ae12c5" alt="Visual Studio 2022의 attach 대화 상자 사용" width="860" height="611" data-path="images/gdk/tools/vs2022_attach_dialog.png" />

Visual Studio 2019를 사용할 때는 **Connection Type** 드롭다운에서 **Remote No Authentication**을 선택하고 **Connection Target** 텍스트 상자에 콘솔의 Host IP 주소를 입력하세요.

## Visual Studio 2022를 사용한 XBOX 프로젝트 디버깅

Visual Studio 2022로 디버깅하려면 디버깅 대상 타이틀이 2021년 10월(또는 이후) Microsoft Game Development Kit(GDK)로 빌드되어야 합니다. 이러한 버전의 Microsoft Game Development Kit(GDK)에 포함된 Game OS에는 Visual Studio 2022로 디버깅하는 데 필요한 바이너리가 포함되어 있어 2021년 10월(또는 이후) Microsoft Game Development Kit(GDK) 의존성이 있습니다. 이전 Game OS에 대해 Visual Studio 2022로 디버깅을 시도하면 다음 오류가 표시됩니다.

<img src="https://mintcdn.com/microsoft-4404708b/6TXzXmujKayly5Sf/images/gdk/tools/vs_2022_old_gamos_debug_error.png?fit=max&auto=format&n=6TXzXmujKayly5Sf&q=85&s=1c2d4c8fd1be70615c84d85d0ce2f216" alt="2022년 3월 GDK에 포함된 버전보다 이전의 Game OS에 대해 Visual Studio 2022 디버거를 사용하려고 시도할 때" width="418" height="191" data-path="images/gdk/tools/vs_2022_old_gamos_debug_error.png" />

## 패키지 빌드 디버깅

<Note>
  XBOX One Software Development Kit 릴리스에서는 패키지 빌드 디버깅 워크플로가 Visual Studio의 **Debug Installed App Packages** 메뉴 항목을 사용하는 것이었습니다. 이 워크플로는 이 섹션에 설명된 대로 Microsoft Game Development Kit(GDK)의 2019년 9월 릴리스에서 크게 단순화되었습니다.
</Note>

[XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)에서 디버거로 타이틀을 실행하거나 실행 중인 타이틀에 연결하는 컨텍스트 메뉴 옵션은 느슨한 파일 배포와 마찬가지로 패키지 빌드에서도 잘 작동합니다.

스트리밍 설치 패키지는 다음 스크린샷과 같이 [XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)의 **Install** 배포 유형과 아이콘으로 식별됩니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_streaming_install.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=f3a1e2537ff1f4c2264daad89c8645b2" alt="현재 콘솔에 대한 타이틀 목록의 타이틀 아이콘으로 식별되는 패키지 빌드 드롭다운 메뉴에서 강조 표시된 Debug Title 메뉴 항목을 보여주는 Visual Studio의 XBOX Gaming Explorer 스크린샷" width="781" height="463" data-path="images/gdk/tools/vs_debug_streaming_install.png" />

<a id="vsdebug_gamelifecycle" />

## Game Lifecycle 상태 간 전환 디버깅

[Game Lifecycle](/build/console-features/console-workflows/xbox-game-life-cycle)을 제대로 지원하려면 full, suspended, constrained 라이프사이클 상태 간 전환에 대한 이벤트 핸들러를 작성해야 합니다. Visual Studio는 타이틀이 Game Lifecycle 상태 전환을 성공적으로 통과하는 데 필요한 견고한 이벤트 핸들러를 작성하는 데 도움이 되는 여러 기능을 제공합니다.

[XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)의 컨텍스트 메뉴에는 개발 키트에서 핸들러를 디버그할 수 있도록 타이틀을 **Suspend**, **Resume**, **Constrain**할 수 있는 옵션이 포함되어 있습니다.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_plm.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=67aa48c4a56fcddb42b61c22fe9535b3" alt="현재 콘솔에 대해 Constrained 상태에 있는 타이틀의 컨텍스트 메뉴에서 강조 표시된 Unconstrain 메뉴 항목을 보여주는 Visual Studio의 XBOX Gaming Explorer 스크린샷." width="393" height="426" data-path="images/gdk/tools/vs_debug_plm.png" />

[XBOX Manager](/tools/tools-console/xbom/xbom)와 [xbApp](/tools/tools-console/commandlinetools/xbapp) 명령줄 도구에서 이러한 상태 전환을 수동으로 트리거할 수도 있습니다.

상태 전환이 어떻게 트리거되든, 전환을 설명하는 진단 메시지와 실패 내용은 [xbWatson](/tools/tools-console/xbWatson/xbwatson)과 Visual Studio 내의 [XBOX System Monitor](/tools/tools-console/visualstudio/xbox-system-monitor) 창에서 확인할 수 있습니다.

리테일 환경에서 **Suspend** 이벤트 핸들러는 1초 이내에 완료되어야 하며, 그렇지 않으면 시스템이 타이틀을 종료합니다. 이 suspend 시간 제한은 개발 키트나 **Suspend** 핸들러 디버깅 시 항상 강제되어서는 안 됩니다. 그렇지 않으면 디버깅이 거의 불가능해집니다.

기본적으로 Visual Studio 디버거(또는 다른 사용자 모드 디버거)가 연결되면 1초 suspend 시간 초과가 비활성화되어 디버깅 작업을 완료하는 데 필요한 시간을 사용할 수 있습니다.

Visual Studio 디버거는 연결된 상태에서도 suspend 시간 초과를 다시 활성화하도록 구성할 수 있습니다. 이 모드에서 **Suspend** 핸들러가 1초 제한 내에 완료되지 않으면 디버거가 강제로 중단하여 시간 제한이 만료되었을 때 **Suspend** 핸들러의 어디에 있었는지 확인할 수 있습니다. 이 모드에서 디버거를 실행하면 **Suspend** 핸들러가 얼마나 자주 시간 제한을 초과하는지, 그리고 그 이유가 무엇인지 파악하는 데 도움이 됩니다. suspend 시간 초과가 활성화된 모드로 디버거를 설정하려면 Visual Studio에서 **Break On Suspend Timeout** 속성을 설정하세요. 이 모드에서 발생하는 디버그 중단은 디버거가 프로세스에 주입하는 새 스레드에서 수행됩니다. 디버깅을 시작하려면 **Suspend** 핸들러가 포함된 스레드로 이동하세요.

<img src="https://mintcdn.com/microsoft-4404708b/NsRUQ49ZRpXgoZ9R/images/gdk/tools/vs_debug_suspend_timeout_property.png?fit=max&auto=format&n=NsRUQ49ZRpXgoZ9R&q=85&s=7061f40a72fa0988c3bea6b1295e632c" alt="Break On Suspend Timeout 속성" width="1176" height="819" data-path="images/gdk/tools/vs_debug_suspend_timeout_property.png" />

suspend 시간 초과가 발생했을 때 디버거가 타이틀에 연결되어 있지 않으면 시스템이 quiesce 크래시 덤프를 생성합니다. 이러한 덤프는 [xbWatson의 Memory Dump 패널](/tools/tools-console/xbWatson/xbwatson)을 사용해 액세스할 수 있습니다.

<a id="vsdebug_dynamic debugging" />

## Visual Studio 2022의 C++ Dynamic Debugging

C++ Dynamic Debugging은 성능을 손상시키지 않고 최적화된 코드에 대해 완전한 디버깅 경험을 제공하는 새 디버깅 기능입니다. 온디맨드 함수 최적화 해제를 통해 어디에서나 최적화 해제된 브레이크포인트를 배치하고 스텝인할 수 있습니다. C++ Dynamic Debugging을 활성화하려면 프로젝트에서 마우스 오른쪽 버튼을 클릭 후 속성 > 구성 속성 > 고급 > 고급 속성 > Use C++ Dynamic Debugging (preview)를 선택하세요. 동적 디버깅 기능을 사용하려면 Visual Studio 2022의 17.14 Preview 2 이상 버전이 필요합니다. 자세한 내용은 [https://aka.ms/dynamicdebugging](https://aka.ms/dynamicdebugging)을 참조하세요.

<Note>
  C++ Dynamic Debugging 사용에 필요한 Visual Studio 버전(17.14)은 2025년 4월 GDK 이후에 릴리스될 예정입니다. Visual Studio 17.14 버전이 릴리스된 후, C++ Dynamic Debugging에 필요한 C++ 디버그 모니터(msvsmon.exe)가 포함된 GDK 업데이트가 릴리스될 것입니다. 해당 GDK 업데이트가 릴리스되기 전에 C++ Dynamic Debugging을 사용하고 싶다면 Microsoft 계정 관리자에게 문의하여 콘솔에 적절한 버전의 C++ 디버그 모니터를 로드하는 방법에 대한 안내를 받으세요.
</Note>

## 참고

[XBOX Gaming Explorer](/tools/tools-console/visualstudio/xbox-gaming-explorer)

[Visual Studio](/tools/tools-console/visualstudio/visualstudio)


## Related topics

- [Visual Studio를 사용한 PC 프로젝트 디버깅](/ko/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio.md)
- [Visual Studio에서 원격 Windows 디바이스의 PC 프로젝트 디버깅하기](/ko/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
- [Visual Studio 2022 GDK 지원 정보](/ko/tools/tools-console/visualstudio/vs-2022-support-notes.md)
- [XBOX 개발용 Visual Studio 프로젝트 템플릿](/ko/tools/tools-console/visualstudio/durango-visual-studio-templates.md)
- [GSDK 프로젝트 테스트 및 디버깅](/ko/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
