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

# Teste e depuração do projeto GSDK

> Teste e depure localmente seu servidor de jogo multijogador ThirdPersonMP com o Unreal GSDK usando o LocalMultiplayerAgent e anexe um depurador antes de carregá-lo no PlayFab.

# Implantação local e depuração do projeto de exemplo ThirdPersonMP

O objetivo deste guia é demonstrar a execução do seu servidor de jogo no seu computador local, de forma compatível com o MPS, para que você possa testar e depurar seu servidor antes de carregá-lo no PlayFab.

## Objetivos

* Testar as opções de implantação local do projeto ThirdPersonMP+GSDK.
* Verificar se o seu servidor é executado corretamente quando executado com o LocalMultiplayerAgent
* Verificar se você consegue anexar um depurador à instância do seu servidor

## Requisitos

* Baixe o Visual Studio. A [versão Community](https://visualstudio.microsoft.com/vs/community/) é gratuita.
  * Cargas de trabalho necessárias: Desenvolvimento para desktop com .NET e Desenvolvimento para desktop com C++
* Baixe o código-fonte do Unreal Engine. Para obter instruções, consulte [Baixando o código-fonte do Unreal Engine (externo)](https://docs.unrealengine.com/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/).
* [Projeto do Unreal concluído](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup) com o [PlayFab Unreal GSDK](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-gsdk-project-setup) instalado e configurado
* Configuração ["Development Server"](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/building-the-third-person-mp-example-project) do seu projeto, criada a partir do Visual Studio
* \[Opcional] Baixe o [LocalMultiplayerAgent](https://github.com/PlayFab/MpsAgent/releases)
  * \[Opcional] Como alternativa, baixe o [código-fonte do LocalMultiplayerAgent](https://github.com/PlayFab/MpsAgent/tree/main/LocalMultiplayerAgent).
* Configuração "Debug" ou "Release" do LocalMultiplayerAgent, criada a partir deste repositório com o Visual Studio
  * Usando o Visual Studio, abra o [MpsAgent.sln](https://github.com/PlayFab/MpsAgent/blob/main/MpsAgent.sln), selecione a configuração Debug ou Release e crie o LocalMultiplayerAgent.
* \[Opcional] Instale o [Docker para Windows](https://www.docker.com/products/docker-desktop)

## Notação

\{depot} se referirá ao caminho completo do Windows do local em que você baixa seus projetos Git. Eles podem estar em qualquer lugar, como: C:\depot, S:\depot, Z:\gitrepos ou qualquer unidade e caminho que sejam convenientes para você. Normalmente, é recomendável (especialmente para o Unreal) que o caminho \{depot} seja o mais curto possível. Para o autor, \{depot} é resolvido como: `M:\depot\GSDK`. Por exemplo, com a lista de requisitos acima, você provavelmente terá alguns ou todos os seguintes:

* \{depot}/ThirdPersonMP
* \{depot}/MpsAgent
* \[Opcional] \{depot}/gsdk \[contém o plug-in PlayFab Unreal GSDK instalado anteriormente no ThirdPersonMP]
* \[Opcional] \{depot}/UnrealMarketplacePlugin  \[contém o plug-in PlayFab Unreal Marketplace, que não é necessário para este guia, mas é necessário para a maioria dos recursos do PlayFab]

Não é obrigatório ter todos eles no mesmo local, mas provavelmente é útil fazer isso, e, para fins de organização, este guia incentiva que você o faça.

## Instruções

### Execução local, sem contêineres

Primeiro, você precisará configurar o LocalMultiplayerAgent para executar seu projeto de servidor. A primeira iteração executa o processo diretamente no seu PC local, sem nenhum isolamento.

No Explorador, encontre e abra o arquivo: `{depot}\MpsAgent\LocalMultiplayerAgent\MultiplayerSettings.json`. Uma versão abreviada desse arquivo, com as partes importantes para este guia, é a seguinte \[OBSERVE os \\'s escapados nos caminhos do json: este é um arquivo json e, portanto, é obrigatório escapar todos os \\'s como \\\\]:

```json theme={null}
{
  "RunContainer": false,
  "OutputFolder": "<Local absolute path that will be used to store the required output artifacts>",
  ...
  "AssetDetails": [
    {
      "MountPath": "C:\\Assets",
      "LocalFilePath": "{PATH-TO-ZIP}"
    }
  ],
  ...
  "PortMappingsList": [
    [
      {
        "NodePort": 30000,
        "GamePort": {
          "Name": "gameport",
          "Number": 8888,
          "Protocol": "UDP"
        }
      }
    ]
  ],
  "ProcessStartParameters": {
    "StartGameCommand": "{PATH-TO-EXE} -log"
  },
  "ContainerStartParameters": {
    "StartGameCommand": "C:\\Assets\\ThirdPersonMPServer.exe -log",
    ...
  }
}
```

Para os fins deste guia, as partes do arquivo json ocultadas por `...` acima simplesmente usam os padrões do projeto. A finalidade e os valores dos campos importantes são os seguintes:

* RunContainer: neste guia, sempre será false. Definir como true exige o Docker.
  * Quando true, ProcessStartParameters/StartGameCommand é ignorado, e ContainerStartParameters/StartGameCommand é usado em seu lugar
  * Quando true, tudo é criado e executado em um contêiner do docker, em vez de no contexto do computador local
  * Este guia aborda o cenário em que RunContainer é false, para que possamos depurar o processo do servidor com mais facilidade
  * Definir como true exige um build de Shipping Server e o [Docker para Windows](https://www.docker.com/products/docker-desktop) adicional
* OutputFolder: `"<Local absolute path that will be used to store the required output artifacts>"`
  * Esse local deve estar totalmente definido, e um diretório válido deve existir nesse local.
* AssetDetails/LocalFilePath: \{PATH-TO-ZIP}
  * Esse local deve estar totalmente definido, e um arquivo zip válido deve existir nesse local
  * Esse arquivo zip deve conter um build "Shipping Server" totalmente construído
* PortMappingsList:
  * É o equivalente no LocalMultiplayerAgent à definição da porta no Game Manager
  * O plug-in GSDK está codificado para procurar uma porta com o nome: gameport
  * O método [SetDefaultServerHostPort](https://github.com/PlayFab/gsdk/blob/master/UnrealPlugin/Source/PlayfabGSDK/Private/GSDKUtils.cpp#L147) do plug-in GSDK substituirá internamente a porta interna de hospedagem do servidor Unreal para corresponder a essa porta
  * O plug-in GSDK *só* usará a porta chamada **gameport**, configurada em **PortMappingsList** ao usar o LocalMultiplayerAgent.
  * Este json permite testar localmente o fornecimento desse número de porta pelo MPS e garante que o plug-in GSDK o receberá corretamente
* ContainerStartParameters/StartGameCommand: enquanto RunContainer for false, não é usado.
  * Quando RunContainer==true, ele substitui ProcessStartParameters/StartGameCommand
  * Esse caminho é o caminho interno dentro do contêiner do docker e será a soma de AssetDetails/MountPath com o caminho interno até o exe no arquivo zip definido por AssetDetails/LocalFilePath
  * Neste exemplo, poderia ser: `C:\\Assets\\ThirdPersonMPServer.exe -log`
* ProcessStartParameters/StartGameCommand: esse comando será, na prática, o caminho para o seu exe e quaisquer parâmetros de linha de comando usados para iniciar o servidor de jogo
  * -log é um comando do Unreal que instrui o servidor de jogo a salvar um log de execução
  * \{PATH-TO-EXE} pode ser uma de duas opções:
    * Qualquer caminho absoluto para um exe do seu servidor de jogo (até mesmo um servidor de jogo de desenvolvimento), mais quaisquer parâmetros de linha de comando do servidor
      * Essa opção ignora o conteúdo do arquivo zip e, em vez disso, executa qualquer exe arbitrário em qualquer local
      * Esta é uma opção de depuração local que só funciona no seu computador local para depurar builds de desenvolvimento: ela não ajuda a verificar se o seu arquivo zip está pronto para ser carregado no MPS
      * Essa opção deve ser usada ao testar um servidor de desenvolvimento, adequado para anexar um depurador do VS
      * Neste exemplo, poderia ser: `{depot}\\ThirdPersonMP\\Binaries\\Win64\\ThirdPersonMPServer.exe -log`
      * Para o autor, é: `M:\\depot\\GSDK\\ThirdPersonMPGSDK\\Binaries\\Win64\\ThirdPersonMPServer.exe -log`
    * Um caminho relativo, que deve indicar o caminho relativo dentro do seu arquivo zip para executar o servidor
      * Este é o fluxo de trabalho padrão, que espelha como funciona em uma instância de nuvem do MPS
      * Essa opção deve ser usada ao testar um shipping server e ajuda a verificar se o seu zip está pronto para ser carregado no MPS
      * Neste exemplo, poderia ser: `ThirdPersonMPServer.exe -log`

Depois de criar seu arquivo zip e definir todas essas linhas com os valores apropriados, você poderá recriar o LocalMultiplayerAgent e se preparar para depurar seu servidor.

### Depurar seu servidor

Você pode executar o LocalMultiplayerAgent a partir do Visual Studio com o comando "Start New Instance", às vezes associado à tecla F5, ou pode navegar até `{depot}\LocalMultiplayerAgent\bin\{configuration}\netcoreapp3.1` e clicar duas vezes em "LocalMultiplayerAgent.exe". Você também pode executá-lo em uma janela cmd para observar ou capturar informações do log de depuração.

Executar o LocalMultiplayerAgent.exe deverá iniciar seu servidor de jogo. Normalmente, você vai querer ter o Gerenciador de Tarefas aberto para isso. Você pode encontrar a ID do processo do servidor de jogo na guia Detalhes do Gerenciador de Tarefas.

Quando vir o processo ThirdPersonMPServer em execução no Gerenciador de Tarefas, você poderá retornar ao Visual Studio e selecionar o menu suspenso Debug -> Attach to Process. Na janela pop-up, você pode pesquisar o nome do processo, ThirdPersonMPServer, e selecionar a ID de processo correta, identificada no Gerenciador de Tarefas.

Neste ponto, você deverá conseguir realizar a depuração típica no seu servidor de jogo.

OBSERVAÇÃO: o Unreal oferece várias configurações de build e várias maneiras de criar o build do servidor. Para obter os melhores resultados, use a configuração "Development Server" e a saída criada diretamente a partir do Visual Studio. Builds de Shipping ou builds do Development Editor podem funcionar melhor em outras situações, mas a configuração "Development Server" criada diretamente a partir do Visual Studio será mais fácil de anexar e depurar no Visual Studio.

## Solução de problemas

### Muitas instâncias de ThirdPersonMPServer no Gerenciador de Tarefas

Se houver várias instâncias listadas (geralmente 3 ou mais), talvez seja necessário usar o Gerenciador de Tarefas para forçar o fechamento das instâncias remanescentes de tentativas anteriores.

### O LocalMultiplayerAgent inicia duas instâncias de ThirdPersonMPServer

Se o seu LocalMultiplayerAgent *iniciar* várias instâncias, procure a ID de processo com um uso de memória comparativamente alto. Algumas configurações do servidor de jogo geram dois executáveis, que são executados em par. Você vai querer anexar ao que tem o maior uso de memória.

## Próximas etapas

Agora você está pronto para implantar [seu servidor na nuvem](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment).

Como alternativa, você pode retornar ao guia principal do [plug-in Unreal GSDK](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk#deploy-to-playfab).


## Related topics

- [Implantação do projeto GSDK na nuvem](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment.md)
- [Visão geral do plug-in PlayFab Unreal GSDK](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/index.md)
- [Configuração do GSDK no projeto](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-gsdk-project-setup.md)
- [Criação do projeto de exemplo do GSDK](/pt-BR/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup.md)
- [Depurar projetos de PC em dispositivos Windows remotos no Visual Studio](/pt-BR/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
