> ## 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.

# 直接連線以對遊戲伺服器進行偵錯

> 透過 RDP 或 SSH 直接連線至 PlayFab 多人遊戲伺服器 VM，以在 Windows 和 Linux 上偵錯遊戲伺服器健康情況、附加分析工具或檢視即時記錄。

若要針對 PlayFab 多人遊戲伺服器進行疑難排解，您應先從 [LocalMultiplayerAgent](https://github.com/PlayFab/LocalMultiplayerAgent) 開始，不過在某些情況下，您可能需要直接連線。例如：

* \*\*環境差異：\*\*有時候，遊戲伺服器的行為在本機環境和線上服務之間可能有所不同。
* \*\*伺服器健康情況：\*\*您可能需要直接連線，以調查伺服器是否被標示為狀況不良。
* \*\*直接附加分析工具/偵錯工具：\*\*透過直接連線分析程式碼可能更簡單。
* \*\*即時記錄分析：\*\*如果您依照[封存和擷取多人遊戲伺服器記錄](/zh-TW/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs)中的指示，您會在伺服器關閉時取得記錄。若要查看即時記錄，您可能會想要直接連線。

若要連線至裝載遊戲伺服器的 VM (Windows 或 Linux)，您可以使用 playfab.com Web 應用程式上的 "Connect" 按鈕取得遠端桌面 (RDP)/SSH 認證。您可以在多人遊戲組建的 "Virtual Machines" 頁面上看到此按鈕。您也可以從 [CreateRemoteUser](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-remote-user) API 呼叫取得認證。

連線至 VM 後，您就可以使用作業系統的主控台監視遊戲伺服器。MPS 服務使用 Docker 容器來啟動遊戲伺服器處理序。若要執行 Docker CLI 命令，您需要在 Windows 上使用系統管理員 PowerShell，在 Linux 上使用 **sudo su -**。

<Info>
  這些是進階的 Docker 容器偵錯指示。使用這些指示可能會破壞您的遊戲伺服器。我們不建議在執行生產遊戲伺服器的容器上使用這些命令。我們強烈建議您不要依賴在偵錯容器時看到的任何行為或資訊。只支援公開記載的 API 和行為，其他內容可能會在未通知的情況下變更。
</Info>

## 適用於 Windows 和 Linux 的指示

#### 如何開始使用 Docker 容器？

無論您是在 Linux 還是 Windows 上開發，都應該熟悉 Docker 容器的基本概念。

您可以[在此處 (外部連結)](https://docs.docker.com/get-started/) 檢視 docker「Get Started」指南。若要深入了解 Windows 容器，請參閱 [Windows 和容器](https://learn.microsoft.com/en-us/virtualization/windowscontainers/about/)。

#### 透過 RDP/SSH 進入 VM 後，如何查看在 Docker 容器中執行的遊戲伺服器清單？

使用 **docker ps**。您會看到容器名稱和雜湊，以及從 VM 連接埠到 Docker 容器連接埠的連接埠對應。

#### 如何查看遊戲伺服器使用的連接埠？

此資訊列在 **docker ps** 上：

```
980d7e80457265230a0bf   "/bin/sh -c ./cppLin…"   About a minute ago   Up About a minute   0.0.0.0:30000->3600/tcp, 0.0.0.0:30001->3601/udp  great_archimedes
```

* `0.0.0.0:30000->3600/tcp` 表示 VM 上的連接埠 30000 已針對 TCP 對應至容器上的 3600
* `0.0.0.0:30001->3601/udp` 表示 VM 上的連接埠 30001 已針對 UDP 對應至容器上的 3601

如需詳細資訊，請參閱 [Docker 網路](https://docs.docker.com/network/)。

<Note>
  在 Windows 和 Linux 中，Docker 容器都屬於 "playfab" Docker 網路。使用 `docker inspect network playfab` 檢視 PlayFab 網路的相關資訊。
</Note>

#### 如何查看容器的執行階段詳細資料？

執行 docker ps 取得容器名稱後，您可以執行 **docker inspect \<ContainerName>**。您會看到許多資訊，例如容器的狀態、主機 VM 上的磁碟區繫結、連接埠繫結、傳入容器的環境變數等。

#### 如何取得遊戲伺服器的記錄？

您可以使用命令 **docker logs \<nameOrHash>**。這些記錄包含您的應用程式傳送至標準輸出/標準錯誤串流的所有內容。請記住，這些記錄只存在於現有的容器中。如果您的遊戲伺服器損毀，VM 中的監視處理序會刪除該容器並建立新的容器。

較佳的做法是使用 GSDK 從遊戲伺服器內部進行記錄。若要深入了解，請參閱[使用 GSDK 記錄](/zh-TW/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk#logging-with-the-gsdk)，並參閱[封存和擷取多人遊戲伺服器記錄](/zh-TW/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs)以存取已終止遊戲伺服器的記錄。

### 我可以連線到執行中容器的「內部」查看發生了什麼事嗎？

您可以在 Windows 上執行 docker exec -it \<nameOrHash> PowerShell，在 Linux 上執行 docker exec -it \<nameOrHash> bash。在那裡，您可以存取容器中的命令列處理序，並發出原生命令來偵錯/診斷問題。

若要讓此命令在 Linux 上運作，您的基礎容器中必須安裝 Bash 殼層。如果沒有安裝，您可以執行 **docker exec -it \<nameOrHash> sh** 來使用 Bourne 殼層。

#### 如何查看容器上開放的連接埠？

連線到容器「內部」後，當您在容器內有命令列處理序時 (請查看先前的指示)，可以在 Windows 上使用 **netstat -ano**，在 Linux 上使用 **netstat -tulpn**。

如果此命令在 Linux 上無法運作，請嘗試透過 **apt update && apt install net-tools** 安裝 netstat。在 Linux 上，您可以在 VM 內使用 **nestatst -tulpn** 查看連接埠是否確實開放。請記得，VM 連接埠與容器連接埠不同，您可以使用 **docker ps** 查看容器的這個連接埠對應。

## Linux 特定指示

#### 如何查看容器的診斷資訊？

您可以安裝 **apt install procps**，然後執行：

* **ps -aux** 查看目前執行中的處理序 (請注意，容器中的主要處理序 PID 為 1。如果此處理序終止，您的容器就會消失)
* **top** 查看即時處理序資訊

#### 如何監視 TCP 和 UDP 封包？

* 請考慮使用 [TCPdump (外部連結)](https://www.tcpdump.org/) 公用程式之類的工具。
* 執行 **apt update && apt install tcpdump** 進行安裝。若要將其用於特定連接埠，請針對 TCP 執行 **tcpdump port 7777**，針對 UDP 執行 **tcpdump udp port 7778**。

您可以從 VM 內部和容器內部使用 tcpdump。不過，由於 VM 連接埠與容器連接埠之間有連接埠對應，請確定您監視的是正確的連接埠值。

## Windows 特定指示

#### 如何判斷資產套件中需要包含的必要 DLL？

如需指示，請參閱[判斷必要的 DLL](/zh-TW/services/playfab/multiplayer/servers/determining-required-dlls)。如果您的遊戲伺服器因為缺少一或多個 DLL 而無法啟動，這篇文章也很有用。

#### LocalMultiplayerAgent 在沒有錯誤訊息的情況下損毀並重新啟動我的 Docker 容器。請幫忙！

發生損毀時，您會看到類似 `Container [ContainerId] exited with exit code 1` 的輸出。例如：

```
info: PlayfabMultiplayerAgent[0]
      Waiting for heartbeats from the game server.....
info: PlayfabMultiplayerAgent[0]
      Container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 exited with exit code 1.
info: PlayfabMultiplayerAgent[0]
      Collecting logs for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
info: PlayfabMultiplayerAgent[0]
      Copying log file C:\ProgramData\Docker\containers\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8-json.log for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 to D:\playfab\PlayFabVmAgentOutput\2020-09-29T01-42-01\GameLogs\032e7357-1956-4a60-9682-ca462cc3ea12\PF_ConsoleLogs.txt.
info: PlayfabMultiplayerAgent[0]
      Deleting container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
```

**偵錯步驟**

* 檢查 PF\_ConsoleLogs.txt 中是否有任何有用的錯誤訊息
* 檢查您的 .zip 資產套件是否包含遊戲所需的所有 DLL。如需指示，請參閱[判斷必要的 DLL](/zh-TW/services/playfab/multiplayer/servers/determining-required-dlls)。
* 檢查 Windows 事件記錄，查看是否有任何關於 Docker 失敗的有用資訊

#### 在 LocalMultiplayerAgent 上，我沒有收到任何活動訊號

可能有先前嘗試遺留下來的容器。您可以使用 **docker ps -a** 查看所有容器，並使用 **docker rm -f \<containerNameOrTag>** 將其刪除。

#### 在 Windows 上，如何監視 TCP 和 UDP 封包？

請考慮使用 [Wireshark (外部連結)](https://www.wireshark.org/) 公用程式之類的工具。

#### 如何使用 Visual Studio 對已部署的多人遊戲伺服器進行偵錯？

如需指示，請參閱[使用 Visual Studio 對伺服器進行偵錯](/zh-TW/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools#debugging-a-deployed-multiplayer-server)

## 另請參閱

* [在本機對遊戲伺服器進行偵錯](/zh-TW/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab)


## Related topics

- [在本機對遊戲伺服器進行偵錯以及與 PlayFab 整合](/zh-TW/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [使用 LocalMultiplayerAgent 對容器遊戲伺服器進行偵錯](/zh-TW/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [使用 LocalMultiplayerAgent 對處理序型遊戲伺服器進行偵錯](/zh-TW/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-process-based-gameserver.md)
- [配置遊戲伺服器並連接 Visual Studio 偵錯工具](/zh-TW/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools.md)
- [GSDK 專案測試和偵錯](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
