Configurando o código do Visual Studio

Visual Studio Code (VSCode) é um editor de código gratuito, executado nos sistemas operacionais macOS, Linux e Windows. Possui suporte a ferramentas elegantes que suportam desenvolvimento em Python e C++, depuração visual, integração com git e muitos outros recursos interessantes. Devido à facilidade de uso e gerenciamento de extensões, é um ótimo editor para desenvolvimento do TensorFlow IO. No entanto, algum esforço é necessário para configurá-lo corretamente. Como a configuração do VSCode é muito flexível, ela permite que os desenvolvedores compilem projetos usando bazel e executem o código em depuradores Python e C++. A configuração da ferramenta base pode diferir com base nos sistemas operacionais, mas a abordagem de configuração deve ser semelhante.

Extensões

Para instalar uma extensão clique no ícone de visualização de extensões (Extensões) na barra lateral ou use o atalho Ctrl+Shift+X. Em seguida, pesquise a palavra-chave abaixo.

  • C/C++ - Extensão oficial C++ da Microsoft
  • Python - extensão oficial do Python da Microsoft
  • Python Extension Pack – outra extensão útil para desenvolvimento Python

Compilando projetos

O TensorFlow IO é compilado usando o comando bazel build:

bazel build -s --verbose_failures --compilation_mode dbg //tensorflow_io/...

Consulte o arquivo README do projeto para obter detalhes sobre como configurar o ambiente de desenvolvimento no Ubuntu. O sinalizador --compilation_mode dbg aqui indica que o binário produzido deve ter símbolos de depuração. Depois de compilar o projeto a partir da linha de comando, você também pode configurar o VSCode para poder invocar o mesmo comando.

Abra View->Command Pallete ( Ctrl+Shift+P ) e comece a digitar: "Tasks: Configure Build Task". Se você estiver fazendo isso pela primeira vez, o editor irá sugerir a criação do arquivo tasks.json. Depois de fazer isso, cole o seguinte json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build TF.IO (Debug)",
            "type": "shell",
            "command": "bazel build -s --verbose_failures --compilation_mode dbg //tensorflow_io/...",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]
}

Agora, você pode pressionar Ctrl+Shift+B e o VSCode usará o comando acima para construir o projeto. Ele usa sua própria janela de terminal, onde todos os links são clicáveis. Portanto, quando ocorre um erro de compilação, você abre o arquivo correspondente e navega até a linha apenas clicando no link na janela do terminal.

Depurando projetos

Depurar o código Python é trivial, siga a documentação oficial para descobrir como configurar o VSCode para permitir isso: https://code.visualstudio.com/docs/python/debugging

No entanto, a depuração do código C++ requer que o GDB esteja instalado em seu sistema. Se você tiver um script python bq_sample_read.py que usa a biblioteca tensorflow-io e normalmente é executado da seguinte maneira:

python3 bq_sample_read.py --gcp_project_id=...

Você pode executá-lo no GDB usando o seguinte:

gdb -ex r --args python3 bq_sample_read.py --gcp_project_id=...

Se o aplicativo travar na fase de código C++, você pode executar backtrace no console GDB para obter o stacktrace do erro.

VSCode também tem suporte para depurador GDB. Permite adicionar pontos de interrupção, observar valores de variáveis ​​​​e percorrer o código passo a passo. Para adicionar configuração de depuração, pressione o ícone Debug View (Debug) na barra lateral ou use o atalho Ctrl+Shift+D . Aqui, pressione a pequena seta para baixo ao lado do botão play e selecione "Adicionar configuração...". Agora será criado um arquivo launch.json , ao qual adicione a seguinte configuração:

{
    "name": "(gdb) Launch",
    "type": "cppdbg",
    "request": "launch",
    "program": "/usr/bin/python3",
    "args": ["bq_sample_read.py", "--gcp_project_id=..."],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [
        {
            /* path to your bazel-bin folder */
            "name": "TFIO_DATAPATH",
            "value": "/usr/local/google/home/io/bazel-bin"
        },
        {
            /* other env variables to use */
            "name": "GOOGLE_APPLICATION_CREDENTIALS",
            "value": "..."
        }
    ],
    "externalConsole": false,
    "MIMode": "gdb",
    "setupCommands": [
        {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        }
    ]
}

Se tudo estiver configurado corretamente, você poderá executar Executar -> Iniciar depuração ( F5 ) ou Executar -> Executar sem depuração ( Ctrl + F5 ). Isso executará seu código no depurador:

Depurador VSCode

Para simplificar ainda mais a experiência de depuração, você pode configurar o GDB para ignorar as bibliotecas C++ padrão. Isso permite que você ignore o código com o qual não se importa. Para fazer isso, crie um arquivo ~/.gdbinit com o seguinte conteúdo:

skip -gfi /usr/include/c++/*/*/*
skip -gfi /usr/include/c++/*/*
skip -gfi /usr/include/c++/*

Formatando arquivos

Você sempre pode reformatar o arquivo C++ ou Python clicando com o botão direito -> Formatar documento ( Ctrl + Shift + I ), mas o VSCode usa uma convenção de estilo diferente. Felizmente, é fácil mudar.

Para formatação Python, consulte https://donjayamanne.github.io/pythonVSCodeDocs/docs/formatting/

Para formatação C++, faça o seguinte:

  • Vá para Preferências -> Configurações
  • Procure por "C_Cpp.clang_format_fallbackStyle"
  • Modifique o file:setting.json diretamente adicionando o seguinte conteúdo
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google}"