概要
以下の手順に従って、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 ++によるデスクトップ開発」などの開発ワークロードを必ず含めてください。
方法
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(デバッグクライアントがアタッチするまで待機する)」を使用して、このドキュメントの「早期アタッチ」セクションを参照してください。
転送が完了すると、たとえば
vulkan_examples_debug
という名前を選択していた場合、Steamゲームライブラリに
Devkit Game:vulkan_examples_debug
という新しいゲームが見つかるはずです。
このゲームを起動すると、リモートデバッグ用のmsvsmonサーバーも自動的に起動します。
これで、実行中のゲームにデバッガーをアタッチできるようになりました。
Visual Studioで
Ctrl+Alt+P
を押して
「デバッグ」 > 「プロセスにアタッチ」を開きます。 接続先でmsvsmonサーバーのIPとポートを設定し、
imgui.exe
プロセスを選択します。
詳細なステップバイステップガイドについては、
Microsoftのデバッグに関するドキュメンテーションを参照してください。
Unreal Engine 4の例
Epic Gamesのアカウント持っていない場合はアカウントを作成し、Unreal Engine 4を
ダウンロードしてインストールしてください。
ここでは、Unrealエディターのサンプルプロジェクトの1つを例として使用します。 新規プロジェクトを作成し、「Puzzle」テンプレートを選択します。
プロジェクト名と保存場所を選択します。
「Edit」->「Project settings」->「Packaging」を開き、「Debug」または「DebugGame」 をビルドコンフィギュレーションとして選択します。 詳細は、公式
リファレンスガイドを参照してください。 「Include Debug Files」にチェックを入れると、パッケージ化されたゲームにデバッグファイルが含まれます。
ゲームにLinuxをサポートしていない外部依存関係がある場合など、Linuxのネイティブビルドをコンパイルできない場合は、「File」->「Package Project」->「Windows (64-bit)」を使ってWindows用のビルドを開始することができます。 これにより「WindowsNoEditor」という新しいディレクトリにビルドが作成されます。
コンパイルしたゲームを
SteamOS Devkit Client
を使用してアップロードします。
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 Debugging Settings(子プロセスのデバッグ設定)」)。
開発キットツールで、「Wait for a debug client to attach(デバッグクライアントがアタッチされるまで待機する)」にチェックを入れ、タイトルをアップロードします。
タイトルを通常通りに起動します。
リモートプロセスにアタッチする場合は、
steam.exe
にアタッチします。アタッチされると、Protonは直ちに子プロセスとしてタイトルを起動し、拡張機能が作動してブレークポイントを有効にし、起動時からのタイトルのデバッグを開始します。