Documentación de Steamworks
Cómo depurar juegos de Windows en Steam Deck

Descripción general

Sigue las instrucciones descritas a continuación para aprender a depurar los archivos binarios de Windows de tu juego (ejecutándose vía Proton) en un kit de desarrollo de Steam Deck. Necesitarás agrupar el runtime de depuración de Windows con tu juego cuando lo cargues en tu kit de desarrollo, y deberás tener Visual Studio y las herramientas de depuración remota ejecutándose en tu máquina Windows del desarrollo.
Esta característica todavía está en desarrollo. Deja cualquier comentario o problema en los foros de desarrolladores de Steam Deck.
NOTA: Las características de depuración remota solo son compatibles con Proton Experimental.

Preparación

Asegúrate de ver Cómo cargar y ejecutar juegos en Steam Deck para poder cargar y ejecutar tu juego en tu kit de desarrollo. Asegúrate de agrupar el runtime de depuración de Windows (ver detalles a continuación).

Agrupar el runtime de depuración de Windows:

El runtime de depuración de Windows no se distribuye con Proton. Tendrás que agrupar las DLL de runtime de depuración con tu compilación. Lee https://docs.microsoft.com/es-es/cpp/windows/preparing-a-test-machine-to-run-a-debug-executable?view=msvc-160 para más detalles. Para Visual Studio debería funcionar una configuración de implementación "Debug". Las propiedades del proyecto tienen una opción avanzada para "Copia del entorno de ejecución de C++ a OutDir" que puede ser útil en los proyectos de C++.

Herramientas de depuración remota de Visual Studio en Proton:

Las herramientas de depuración remota de Visual Studio no se distribuyen con Proton. Cuando cargues un título con el botón de Steam Play seleccionado, la herramienta del kit de desarrollo copiará las herramientas de depuración remota desde tu host de desarrollo de Windows al sistema del kit de desarrollo.

En este momento, el kit de desarrollo buscará si están instaladas las herramientas de depuración en Visual Studio 2019 y 2017. Para poder tener disponibles las herramientas de depuración remota, cuando instales Visual Studio, asegúrate de incluir una carga de trabajo de desarrollo como "Desarrollo para el escritorio con C++".

VirtualBox_Win_10_05_08_2021_18_05_44.png

Uso

Ejemplos de Vulkan

El proyecto Ejemplos de Vulkan es un buen punto de partida para acostumbrarse a depurar de forma remota los juegos cargados en el kit de desarrollo de Steam Deck.

Clona el proyecto y cambia el directorio actual:
git clone --recursive https://gitlab.steamos.cloud/jupiter/vulkan-examples.git cd vulkan-examples

El proyecto contiene varias muestras pequeñas de Vulkan ubicadas en el directorio de ejemplos. Para fines de documentación, solo usaremos imgui. Genera y construye el proyecto:
cmake -G "Visual Studio 16 2019" -S . -Bbuild/windows cmake --build build/windows --config Debug --target imgui

Nota: La compilación de CMake descarga recursos adicionales ejecutando un pequeño script; necesitarás tener Python en el host de tus compilaciones.

Esto crea un directorio build/windows/bin/Debug que incluye el ejecutable imgui, las DLL de depuración de Windows requeridas y los recursos de datos.

En ese momento podrás cargar el directorio Debug resultante.

Asegúrate de seleccionar "This title requires Steam Play" (Este título requiere Steam Play), porque esta no es una compilación nativa de Linux. También debes marcar "Start Visual Studio C++ debugger service on launch" (Iniciar el servicio de depuración de C++ de Visual Studio al arrancar) para activar un depurador remoto.

Si no es adecuado asociarlo cuando el juego ya se está ejecutando y quieres depurar el arranque y la inicialización de tu título, utiliza la opción "Wait for a debug client to attach" (Esperar a que se asocie un cliente de depuración) y consulta la sección "Asociación temprana" de este documento.

devkit-tool-remote-debug-20211207.png

Una vez completada la transferencia, si, por ejemplo, elegiste el nombre vulkan_examples_debug, deberás encontrar un nuevo juego llamado Devkit Game: vulkan_examples_debug en la biblioteca de juegos de Steam.

Al iniciar el juego, también se iniciará automáticamente un servidor msvsmon para la depuración remota.

Screenshot_from_2021-07-14_10-05-21.png

Finalmente, ahora puedes asociar un depurador al juego en ejecución.

En Visual Studio, presiona Ctrl+Alt+P para abrir Depurar > Asociar al proceso. En Destino de la conexión, introduce la IP y el puerto del servidor msvsmon y luego selecciona el proceso imgui.exe.

Screenshot_2021-07-26_092207.png

Para una guía detallada paso a paso, visita la documentación de depuración de Microsoft.

Ejemplos de Unreal Engine 4

Crea una cuenta de Epic Games, si aún no tienes una, y luego descarga e instala Unreal Engine 4.

Como ejemplo, vamos a usar uno de los proyectos de muestra que ofrece Unreal Editor. Crea un nuevo proyecto y selecciona la plantilla "Puzzle".

Screenshot_2021-07-16_072803.png

Elige un nombre de proyecto y una ubicación.

Screenshot_2021-07-15_082533.png

Ve a Editar->Ajustes del proyecto->Empaquetado y elige "Debug" o "DebugGame" en "Build Configuration". Puedes encontrar más información en la documentación oficial. Si marcas "Include Debug Files", los archivos de depuración se incluirán en el juego empaquetado.

Screenshot_2021-07-16_073647.png

Si no puedes crear una compilación nativa de Linux (por ejemplo, porque tu juego tiene dependencias externas no compatibles con Linux), puedes iniciar una compilación de Windows con Archivo->Empaquetar el proyecto->Windows (64-bit). Esto creará una compilación en un nuevo directorio llamado "WindowsNoEditor".

Carga tu juego compilado usando SteamOS Devkit Client.

Screenshot_2021-07-16_074524.png

En la biblioteca de Steam, deberías tener una nueva entrada con un nombre similar a Devkit Game: puzzle. Al iniciar el juego, también se iniciará automáticamente un servidor msvsmon para la depuración remota.

Como último paso, ahora puedes asociar un depurador al juego en ejecución.

En Visual Studio, pulsa Ctrl+Alt+P para abrir Depurar > Asociar al proceso. En Destino de la conexión, introduce la IP y el puerto del servidor msvsmon y luego selecciona el proceso puzzle.exe.

Para una guía detallada paso a paso, puedes ver la documentación de depuración de Microsoft.

Inicio del proceso de depuración remota: asociación temprana:


El servicio de depuración remota puede configurarse para esperar a que el usuario se asocie antes de lanzar el título. Esto te permite establecer un punto de interrupción en WinMain u otro código de inicialización.

Esto requiere que primero instales una extensión de Microsoft en Visual Studio en tu equipo host de desarrollo: https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool

child-process-debug-extension.pn

Una vez instalada la extensión, activa la depuración de proceso secundario siguiendo la documentación (Debug > Other Debug Targets > Child Process Debugging Settings).

Marca "Wait for a debug client to attach" (espera a que se asocie un cliente de depuración) en Steam DevKit Management Tool y carga tu título.

Inicia tu título normalmente.

Cuando asocies al proceso remoto, hazlo a steam.exe. Una vez que asocies, Proton lanzará inmediatamente tu título como un proceso secundario, la extensión se pondrá en marcha y comenzará a depurar el título desde su inicio con tus puntos de interrupción activados.