Usar contêineres para compilação e depuração com Visual Studio Code

Se você usar Visual Studio Code para desenvolvimento de aplicativos, poderá configurar seu projeto para que ele seja criado dentro de um contêiner. Em seguida, você pode compilar e depurar diretamente no contêiner. Este tópico pressupõe que você tenha criado um projeto com Visual Studio Code para que o diretório .vscode exista e tenha os dois arquivos launch.json e settings.json.

Este tópico discute o uso de contêineres localmente; Usar codespaces do GitHub para compilar e depurar descreve o uso de Codespaces do GitHub para editar, compilar, implantar e depurar seus aplicativos do Azure Sphere.

Configurar a pasta .devcontainer

No diretório de nível superior do projeto, crie uma pasta chamada .devcontainer. Nesta pasta, crie um arquivo chamado devcontainer.json com o seguinte conteúdo:

{
    "name": "Azure Sphere Blink",
    "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],
    "build": {
    "dockerfile": "Dockerfile",
    "target": "dev"
    },

    // Use 'settings' to set *default* container specific settings.json values on container create.
    // You can edit these settings after create using File > Preferences > Settings > Remote.
    "settings": {
            "terminal.integrated.shell.linux": "/bin/bash"
    },

    // Use 'appPort' to create a container with published ports. If the port isn't working, be sure
    // your server accepts connections from all interfaces (0.0.0.0 or '*'), not just localhost.
    // "appPort": [],

    // Uncomment the next line to run commands after the container is created.
    // "postCreateCommand": "gcc -v",

    // Comment out the next line if you want to run as root instead
    "remoteUser": "vscode",

    // Add the IDs of extensions you want installed when the container is created in the array below.
    "extensions": [
    "ms-vscode.cpptools",
    "ms-vscode.azure-sphere-tools",
    "ms-vscode.azure-sphere-tools-ui"
    ]
}

Em seguida, crie um arquivo chamado Dockerfile na pasta .devcontainer com o seguinte conteúdo:

FROM mcr.microsoft.com/azurespheresdk:latest AS dev

FROM dev AS build
COPY ./ /src/
WORKDIR /out
RUN cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
    -DAZURE_SPHERE_TARGET_API_SET="latest-lts" -DCMAKE_BUILD_TYPE="Release" "/src"
ENTRYPOINT [ "ninja" ]

A linha inicial FROM especifica a imagem padrão do Docker do Azure Sphere como o contêiner de desenvolvimento base e a segunda diz para usar esse contêiner base como o ambiente de build. A COPY linha copia o conteúdo do repositório no diretório /src/do contêiner. O WORKDIR especifica o diretório de build. O RUN comando fornece o comando CMake para gerar os arquivos de build. Por fim, o especifica que o ENTRYPOINT ninja deve ser invocado para realmente criar o aplicativo.

Compilar e depurar o projeto

Abra a pasta do projeto em Visual Studio Code. Visual Studio Code detecta os novos arquivos e abre uma caixa de mensagens dizendo "Pasta contém um arquivo de configuração de contêiner de desenvolvimento. Reabra para pasta para desenvolver em um contêiner.". Selecione o botão Reabrir em Contêiner para reabrir a pasta no contêiner criado pelo arquivo .devcontainer/Dockerfile. A barra de título no Visual Studio Code alterações para mostrar que você está editando em um contêiner. Se você abrir a guia Extensões na barra de navegação à esquerda, verá as extensões instaladas localmente e as instaladas no contêiner.

Pressione F5 para criar seu projeto e começar a depuração. Seu aplicativo cria e sideloads para seu dispositivo, como de costume. Se você tiver definido um ponto de interrupção em seu código, o aplicativo será executado até que o ponto de interrupção seja atingido. Você pode usar os comandos de depuração habituais para percorrer seu código. Consulte o tópico Depuração no Visual Studio Code documentação para obter mais detalhes.

Quando terminar de depurar, pressione Shift+F5 ou o ícone Parar. Para fechar o contêiner, use o comando Fechar Conexão Remota do menu Remoto na barra de ferramentas Visual Studio Code.