Steamworks ドキュメンテーション
Steam DeckでのWindowsゲームのデバッグ方法

概要

以下の手順に従って、Steam Deck開発キットでゲームのWindowsバイナリ(Protonを介して実行)をデバッグする方法を学ぶことができます。 開発キットにアップロードする際に、Windowsデバッグランタイムをゲームにバンドルする必要があります。また、Windows開発環境で実行されているVisualStudioとリモートデバッグツールもバンドルする必要があります。
本機能は開発中のものです。 フィードバックや問題は
Steam Deck開発者掲示板に共有してください。
注:リモートデバッグ機能のサポート対象は、Proton - Experimentalリリースに対してのみです。

セットアップ

開発キットにゲームをアップロードして実行するには、必ずSteam Deckにゲームをロードして実行する方法をお読みください。 必ずWindowsデバッグランタイムをバンドルしてください(詳細は後述)。

Windowsデバッグランタイムをバンドルする:

ProtonにはWindowsデバッグランタイムは含まれません。 デバッグランタイムDLLをビルドにバンドルする必要があります。 詳細は、https://docs.microsoft.com/ja-jp/cpp/windows/preparing-a-test-machine-to-run-a-debug-executable を参照してください。 Visual Studioの場合、デバッグ構成によって配置されます。 プロジェクトプロパティには、C++プロジェクトに便利な「C++ランタイムをOutDirにコピーする」高度なオプションがあります。

ProtonでのVisual Studioリモートデバッグツール:

Visual StudioのリモートデバッグツールはProtonには含まれません。 Steam Playを有効にしたタイトルをアップロードすると、開発キットツールが、Windows開発ホストから開発キットシステムへとリモートデバッグツールをコピーします。

現在、開発キットは、Visual Studio2019およびVisual Studio2017からインストールされたデバッグツールを検索します。 リモートデバッグツールを使用できるようにするには、Visual Studioをインストールするときに、「C ++によるデスクトップ開発」などの開発ワークロードを必ず含めてください。

VirtualBox_Win_10_05_08_2021_18_05_44.png

方法

Vulkanの例

プロジェクトVulkanの例は、Steam Deck開発キットにアップロードしたゲームをリモートでデバッグすることに慣れる良い出発点です。

プロジェクトを複製し、現在のディレクトリを変更します:
git clone --recursive https://gitlab.steamos.cloud/jupiter/vulkan-examples.git cd vulkan-examples

プロジェクトのexamplesディレクトリ内には、いくつかの異なる小さなVulkanサンプルが含まれています。 このドキュメントでは、imguiを使用します。 プロジェクトを生成してビルドします:
cmake -G "Visual Studio 16 2019" -S . -Bbuild/windows cmake --build build/windows --config Debug --target imgui

注:CMakeビルドは、小さなスクリプトを実行して追加のアセットをダウンロードします。ビルドホストにPythonが必要です。

これにより、imgui実行可能ファイル、必要なWindowsデバッグDLL、およびデータアセットを含むbuild/windows/bin/Debugディレクトリが作成されます。

この時点で、上記の手順で作成したDebugディレクトリをアップロードできます。

これはLinuxのネイティブビルドではないため、必ず「This title requires Steam Play(このタイトルにはSteam Playが必要です)」を選択し、さらに「Start Visual Studio C++ debugger service on launch(起動時にVisual Studio C++デバッガーサービスを実行する)」を選択してリモートデバッガーを有効にしてください。

ゲームの実行後にアタッチするだけでは不十分で、タイトルの起動と初期化をデバッグしたい場合は、「Wait for a debug client to attach(デバッグクライアントがアタッチするまで待機する)」を使用して、このドキュメントの「早期アタッチ」セクションを参照してください。

devkit-tool-remote-debug-20211207.png

転送が完了すると、たとえばvulkan_examples_debugという名前を選択していた場合、SteamゲームライブラリにDevkit Game:vulkan_examples_debugという新しいゲームが見つかるはずです。

このゲームを起動すると、リモートデバッグ用のmsvsmonサーバーも自動的に起動します。

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

これで、実行中のゲームにデバッガーをアタッチできるようになりました。

Visual StudioでCtrl+Alt+Pを押して「デバッグ」 > 「プロセスにアタッチ」を開きます。 接続先でmsvsmonサーバーのIPとポートを設定し、imgui.exeプロセスを選択します。

Screenshot_2021-07-26_092207.png

詳細なステップバイステップガイドについては、Microsoftのデバッグに関するドキュメンテーションを参照してください。

Unreal Engine 4の例

Epic Gamesのアカウント持っていない場合はアカウントを作成し、Unreal Engine 4をダウンロードしてインストールしてください。

ここでは、Unrealエディターのサンプルプロジェクトの1つを例として使用します。 新規プロジェクトを作成し、「Puzzle」テンプレートを選択します。

Screenshot_2021-07-16_072803.png

プロジェクト名と保存場所を選択します。

Screenshot_2021-07-15_082533.png

「Edit」->「Project settings」->「Packaging」を開き、「Debug」または「DebugGame」 をビルドコンフィギュレーションとして選択します。 詳細は、公式リファレンスガイドを参照してください。 「Include Debug Files」にチェックを入れると、パッケージ化されたゲームにデバッグファイルが含まれます。

Screenshot_2021-07-16_073647.png

ゲームにLinuxをサポートしていない外部依存関係がある場合など、Linuxのネイティブビルドをコンパイルできない場合は、「File」->「Package Project」->「Windows (64-bit)」を使ってWindows用のビルドを開始することができます。 これにより「WindowsNoEditor」という新しいディレクトリにビルドが作成されます。

コンパイルしたゲームをSteamOS Devkit Clientを使用してアップロードします。

Screenshot_2021-07-16_074524.png

Steamライブラリに、Devkit Game: puzzleのような名前が付いた新しいエントリーがあるはずです。 このゲームを起動すると、リモートデバッグ用のmsvsmonサーバーも自動的に起動します。

最後に、実行中のゲームにデバッガーをアタッチします。

Visual StudioでCtrl+Alt+Pを押して「デバッグ」 > 「プロセスにアタッチ」を開きます。 接続先でmsvsmonサーバーのIPとポートを設定し、puzzle.exeプロセスを選択します。

詳細なステップバイステップガイドについては、Microsoftのデバッグに関するドキュメントを参照してください。

リモートデバッグプロセス起動時:「早期アタッチ」サポート


リモートデバッグサービスは、タイトルを起動する前にクライアントがアタッチされるまで待機するように設定できます。 これにより、WinMainまたはその他の初期化コードにブレークポイントを設定できます。

これには、最初に開発ホストのVisual StudioにMicrosoft拡張機能をインストールする必要があります: https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool

child-process-debug-extension.png

拡張機能をインストールしたら、ドキュメントに従って子プロセスのデバッグを有効にします(「デバッグ」> 「その他のデバッグターゲット」> 「Child Process Debugging Settings(子プロセスのデバッグ設定)」)。

開発キットツールで、「Wait for a debug client to attach(デバッグクライアントがアタッチされるまで待機する)」にチェックを入れ、タイトルをアップロードします。

タイトルを通常通りに起動します。

リモートプロセスにアタッチする場合は、steam.exeにアタッチします。アタッチされると、Protonは直ちに子プロセスとしてタイトルを起動し、拡張機能が作動してブレークポイントを有効にし、起動時からのタイトルのデバッグを開始します。