Tài liệu Steamworks
Phương thức debug trò chơi Windows trên Steam Deck

Tổng quan

Làm theo hướng dẫn bên dưới để biết cách debug file binary Windows của trò chơi (chạy thông qua Proton) trên bộ kit phát triển Steam Deck. Khi tải vào bộ kit phát triển, bạn sẽ cần gộp runtime debug của Windows với trò chơi, Visual Studio & công cụ debug từ xa chạy trên môi trường phát triển Windows.
Tính năng này vẫn đang được phát triển. Hãy để lại góp ý / vấn đề bạn gặp phải trong diễn đàn nhà phát triển Steam Deck.
LƯU Ý: Tính năng debug từ xa chỉ được hỗ trợ trên bản phát hành Proton - Experimental.

Thiết lập

Hãy xem qua Cách nạp và chạy trò chơi trên Steam Deck để tải lên và chạy trò chơi trên bộ kit phát triển. Nhớ gộp runtime debug của Windows (xem chi tiết bên dưới).

Gộp runtime debug Windows:

Runtime debug Windows không đi kèm với Proton. Bạn cần phải gộp các DLL runtime debug với bản build. Truy cập https://docs.microsoft.com/en-us/cpp/windows/preparing-a-test-machine-to-run-a-debug-executable để biết thêm chi tiết. Đối với Visual Studio, dùng một thiết lập triển khai debug là được. Mục properties của dự án có một lựa chọn nâng cao để 'Copy C++ Runtime to OutDir' có thể hữu ích cho các dự án C++.

Các công cụ debug từ xa của Visual Studio trong Proton:

Các công cụ debug từ xa của Visual Studio không đi kèm với Proton. Khi tải một sản phẩm với nút Steam Play được chọn, công cụ kit phát triển sẽ chép các công cụ debug từ xa trên máy chủ phát triển Windows sang hệ thống kit phát triển.

Hiện tại, bộ kit phát triển sẽ tìm kiếm các công cụ debug đã cài đặt của Visual Studio 2019 và Visual Studio 2017. Để có sẵn công cụ debug từ xa, khi cài đặt Visual Studio, hãy đảm bảo bao gồm một Workload phát triển như "Desktop development with C++".

VirtualBox_Win_10_05_08_2021_18_05_44.png

Sử dụng

Các ví dụ Vulkan

Dự án các ví dụ Vulkan là điểm bắt đầu hợp lý để làm quen với việc debug từ xa các trò chơi được tải lên bộ kit phát triển Steam Deck.

Sao chép dự án và đổi thư mục hiện tại:
git clone --recursive https://gitlab.steamos.cloud/jupiter/vulkan-examples.git cd vulkan-examples

Dự án chứa vài mẫu Vulkan nhỏ khác nhau được đặt tại thư mục ví dụ. Trong tài liệu này, chúng ta sẽ chỉ dùng imgui. Tạo và dựng dự án:
cmake -G "Visual Studio 16 2019" -S . -Bbuild/windows cmake --build build/windows --config Debug --target imgui

Lưu ý: bản build Cmake tải thêm các tư liệu bằng cách chạy một bảng mã nhỏ, bạn sẽ cần Python trên máy chủ build.

Điều này sẽ tạo một thư mục build/windows/bin/Debug có chứa file thực thi imgui, các DLL debug Windows được yêu cầu và tư liệu dữ liệu.

Lúc này, bạn có thể tải lên thư mục debug vừa tạo.

Đừng quên chọn "This title requires Steam Play", vì đây không phải build native dành cho Linux, cũng như "Start Visual Studio C++ debugger service on launch" để bật bộ debug từ xa.

Nếu kết nối khi trò chơi đang chạy vẫn chưa đủ, và muốn debug quá trình khởi động và bắt đầu sản phẩm, vui lòng "Wait for a debug client to attach" và xem mục "hỗ trợ gán sớm" trong tài liệu này.

devkit-tool-remote-debug-20211207.png

Một khi việc chuyển giao hoàn tất, ví dụ nếu chọn tên vulkan_examples_debug, bạn sẽ tìm thấy một trò chơi được gọi là Devkit Game: vulkan_examples_debug trong cùng thư viện trò chơi Steam.

Khi khởi động trò chơi, một máy chủ msvsmon dành để gỡ lỗi từ xa cũng sẽ tự động khởi chạy.

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

Giờ đây bạn có thể đính kèm một bộ debug vào trò chơi đang chạy.

Trong Visual Studio, nhấn Ctrl+Alt+P để mở Debug > Attach to Process. Trong mục tiêu kết nối, thiết lập IP và cổng của máy chủ msvsmon, rồi chọn quy trình imgui.exe.

Screenshot_2021-07-26_092207.png

Để tìm thấy hướng dẫn từng bước một, bạn có thể theo dõi trang tài liệu debug Microsoft.

Các ví dụ Unreal Engine 4

Tạo một tài khoản Epic Games nếu bạn chưa có, rồi sau đó tải và cài đặt Unreal Engine 4.

Chúng ta sẽ dùng một trong các mẫu dự án do Unreal Editor cung cấp để làm ví dụ. Tạo một dự án mới và chọn mẫu "Puzzle".

Screenshot_2021-07-16_072803.png

Chọn tên dự án và một nơi chứa

Screenshot_2021-07-15_082533.png

Đi đến Edit->Project settings->Packaging và chọn "Debug" hoặc "DebugGame" cho thiết lập bản build. Bạn có thể tìm thêm thông tin tại trang tư liệu chính thức. Nếu chọn "Include Debug Files", các file debug sẽ được đính kèm trong gói trò chơi.

Screenshot_2021-07-16_073647.png

Nếu bạn không thể kết xuất một bản dựng dành cho Linux, ví dụ vì trò chơi của bạn có những ứng dụng phụ thuộc bên ngoài không hỗ trợ Linux, bạn có thể dùng một bản build Windows bằng cách File->Package Project->Windows (64-bit). Điều này sẽ tạo một bản build trong một thư mục mới có tên"WindowsNoEditor".

Tải trò chơi đã được kết xuất của bạn bằng SteamOS Devkit Client.

Screenshot_2021-07-16_074524.png

Trong thư viện Steam, bạn sẽ thấy một mục có tên giống như sau Devkit Game: puzzle. Khi khởi động trò chơi, một máy chủ msvsmon dành để debug từ xa cũng sẽ tự động khởi chạy.

Ở bước cuối cùng, giờ bạn có thể gắn một bộ debug vào trò chơi đang chạy.

Trong Visual Studio, nhấn Ctrl+Alt+P để mở Debug > Attach to Process. Trong mục tiêu kết nối, thiết lập IP và cổng của máy chủ msvsmon, rồi chọn quy trình puzzle.exe.

Để tìm thấy hướng dẫn từng bước một, bạn có thể theo dõi trang tài liệu debug Microsoft.

Quá trình debug từ xa ứng dụng lúc khởi động: hỗ trợ "gán sớm":


Tính năng debug từ xa có thể thiết lập để chờ người dùng đính vào trước khi khởi động. Điều này sẽ cho phép bạn đặt breakpoint trong WinMain hoặc các đoạn mã khởi động khác.

Trước tiên bạn phải cài đặt một extension của Microsoft trong Visual Studio từ máy chủ phát triển của bạn: https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool

child-process-debug-extension.png

Sau khi cài đặt xong extension, bật child process debugging (gỡ lỗi ứng dụng con) theo như tài liệu đã nêu (Debug > Other Debug Targets > Child Process Debugging Settings)

Kiểm tra "Wait for a debug client to attach" trong công cụ devkit của bạn, và tải lên sản phẩm.

Khởi động trò chơi như bình thường.

Khi gán tới ứng dụng từ xa, đính vào steam.exe - sau khi gán, Proton sẽ ngay lập tức khởi động trò chơi của bạn dưới dạng process con, và extension sẽ bắt đầu và debug trò chơi ngay từ lúc khởi động với breakpoint đã kích hoạt.