Analisar o arquivo de configurações de inicialização
- 11 minutos
Você já viu que o Visual Studio Code usa o arquivo launch.json para configurar o depurador. Se você estiver criando um aplicativo de console C# simples, provavelmente, o Visual Studio Code vai gerar um arquivo launch.json com todas as informações necessárias para depurar o código com sucesso. No entanto, há casos em que você precisa modificar uma configuração de inicialização, ou seja, é importante entender os atributos de uma configuração de inicialização.
Atributos de uma configuração de inicialização
O arquivo launch.json inclui uma ou mais configurações de inicialização na lista configurations. As configurações de inicialização usam atributos para dar suporte a diferentes cenários de depuração. Os seguintes atributos são obrigatórios para cada configuração de inicialização:
-
name: o nome amigável do leitor atribuído à configuração de inicialização. -
type: o tipo de depurador a ser usado para a configuração de inicialização. -
request: o tipo de solicitação da configuração de inicialização.
Esta seção define alguns dos atributos que você poderá encontrar.
Nome
O atributo name especifica o nome de exibição da configuração de inicialização. O valor atribuído a name é exibido na lista suspensa de configurações de inicialização (no painel de controles na parte superior da exibição EXECUÇÃO E DEPURAÇÃO).
Tipo
O atributo type especifica o tipo de depurador a ser usado para a configuração de inicialização. Um valor de codeclr especifica o tipo de depurador para aplicativos .NET 5+ (incluindo aplicativos C#).
Solicitação
O atributo request especifica o tipo de solicitação da configuração de inicialização. Atualmente, só há suporte para os valores launch e attach.
PreLaunchTask
O atributo preLaunchTask especifica uma tarefa a ser executada antes da depuração do programa. A tarefa em si pode ser encontrada no arquivo tasks.json, que está na pasta .vscode com o arquivo launch.json. A especificação de uma tarefa de pré-inicialização de build executa um comando dotnet build antes da inicialização do aplicativo.
Programa
O atributo program é definido como o caminho da DLL do aplicativo ou do executável de host do .NET a ser iniciado.
Essa propriedade normalmente usa o formato: ${workspaceFolder}/bin/Debug/<target-framework>/<project-name.dll>.
Em que:
-
<target-framework>é a estrutura para a qual o projeto de depuração está sendo criado. Esse valor normalmente é encontrado no arquivo de projeto como a propriedade 'TargetFramework'. -
<project-name.dll>é o nome da DLL de saída de build do projeto depurado. Essa propriedade normalmente é igual ao nome do arquivo de projeto, mas com uma extensão '.dll'.
Por exemplo: ${workspaceFolder}/bin/Debug/net10.0/Debug101.dll
Observação
A extensão .dll indica que esse arquivo é um arquivo DLL (biblioteca de vínculo dinâmico). Se o projeto for chamado Debug101, um arquivo chamado Debug101.dll será criado quando uma tarefa de build compilar seu programa usando os arquivos Program.cs e Debug101.csproj. Você pode encontrar o arquivo Debug101.dll no modo de exibição EXPLORER expandindo as pastas "bin" e "Debug" e abrindo uma pasta que representa a estrutura do .NET usada pelo seu projeto de código, como "net10.0". A versão do .NET Framework é especificada no arquivo.csproj.
Cwd
O atributo cwd especifica o diretório de trabalho do processo de destino.
Argumentos
O atributo args especifica os argumentos que são transmitidos para o programa na inicialização. Não há argumentos por padrão.
Console
O atributo console especifica o tipo de console usado quando o aplicativo é iniciado. As opções são internalConsole, integratedTerminal e externalTerminal. A configuração padrão é internalConsole. Os tipos de console são definidos como:
- A configuração
internalConsolecorresponde ao painel CONSOLE DE DEPURAÇÃO na área Painéis abaixo do Editor do Visual Studio Code. - A configuração
integratedTerminalcorresponde ao painel SAÍDA na área Painéis abaixo do Editor do Visual Studio Code. - A configuração
externalTerminalcorresponde a uma janela de terminal externo. O aplicativo Prompt de comando fornecido com o Windows é um exemplo de uma janela de terminal.
Importante
O painel CONSOLE DE DEPURAÇÃO não dá suporte à entrada do console. Por exemplo, o CONSOLE DE DEPURAÇÃO não pode ser usado se o aplicativo inclui uma instrução Console.ReadLine(). Quando você estiver trabalhando em um aplicativo de console C# que lê a entrada de usuário, a configuração console precisará ser definida como integratedTerminal ou externalTerminal. Os aplicativos de console que gravam mensagens no console, mas não leem a entrada do console, podem usar uma das três configurações do console.
Parar na Entrada
Caso você precise parar no ponto de entrada do destino, opcionalmente, defina stopAtEntry como true.
Editar uma configuração de inicialização
Há muitos cenários em que talvez seja necessário personalizar o arquivo de configuração de inicialização. Muitos deles envolvem cenários de projeto avançados ou complexos. Este módulo tem como foco dois cenários simples quando a atualização do arquivo de configuração de inicialização é necessária:
- Seu aplicativo de console C# lê a entrada do console.
- O workspace do projeto inclui mais de um aplicativo.
Atualizar a configuração de inicialização para acomodar a entrada do console
Como você já leu, o painel CONSOLE DE DEPURAÇÃO não dá suporte à entrada do console. Se você estiver depurando em um aplicativo de console que depende da entrada de usuário, atualize o atributo console na configuração de inicialização associada.
Para editar o atributo console:
Abra o arquivo launch.json no Editor do Visual Studio Code.
Localize o atributo console.
Selecione os dois-pontos e o valor atribuído e insira um caractere de dois-pontos.
Observe que, quando você substitui as informações existentes por dois-pontos, o IntelliSense do Visual Studio Code exibe as três opções em uma lista suspensa.
Selecione integratedTerminal ou externalTerminal.
Salve o arquivo launch.json.
Atualizar a configuração de inicialização para acomodar vários aplicativos
Se o workspace tiver apenas um projeto inicializável, a extensão do C# vai gerar o arquivo launch.json automaticamente. Se você tiver mais de um projeto inicializável, modifique o arquivo launch.json manualmente. O Visual Studio Code gera um arquivo launch.json usando o modelo básico que você pode atualizar. Nesse cenário, você cria configurações separadas para cada aplicativo que deseja depurar. As tarefas de pré-inicialização, como uma tarefa de build, podem ser criadas no arquivo tasks.json.
Suponha que você esteja trabalhando em um projeto de codificação que inclua vários aplicativos de console. A pasta raiz do projeto, SpecialProjects, é a pasta de workspace que você abre no Visual Studio Code quando trabalha no código. Você tem dois aplicativos em desenvolvimento: Project123 e Project456. Você usará a exibição EXECUÇÃO E DEPURAÇÃO para depurar os aplicativos. Você deseja escolher o aplicativo que está depurando na interface do usuário. Você também deseja que todas as atualizações de código salvas sejam compiladas antes de anexar o depurador ao aplicativo.
Você pode atingir os requisitos para esse cenário atualizando os arquivos launch.json e tasks.json.
A captura de tela a seguir mostra a exibição EXPLORER e a estrutura de pastas que contém Project123 e Project456.
Observe que a pasta .vscode que contém os arquivos launch.json e tasks.json está associada à pasta do workspace, SpecialProjects, não às pastas de projetos individuais.
O exemplo a seguir mostra como você pode configurar o arquivo launch.json para incluir configurações para os aplicativos "Project123" e "Project456".
"version": "0.2.0",
"configurations": [
{
"name": "Launch Project123",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildProject123",
"program": "${workspaceFolder}/Project123/bin/Debug/net10.0/Project123.dll",
"args": [],
"cwd": "${workspaceFolder}/Project123",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Launch Project456",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildProject456",
"program": "${workspaceFolder}/Project456/bin/Debug/net10.0/Project456.dll",
"args": [],
"cwd": "${workspaceFolder}/Project456",
"console": "internalConsole",
"stopAtEntry": false
}
]
Observe que os campos name, preLaunchTask e program estão configurados para um aplicativo específico.
O atributo name especifica a opção de inicialização selecionável que é exibida na interface do usuário da exibição EXECUÇÃO E DEPURAÇÃO, e o atributo program especifica o caminho para o aplicativo. O atributo preLaunchTask é usado para especificar o nome da tarefa executada antes da inicialização do depurador. O arquivo tasks.json contém as tarefas nomeadas e as informações necessárias para concluir a tarefa.
O exemplo a seguir mostra como você pode configurar o arquivo tasks.json. Nesse caso, as tarefas nomeadas especificam operações de build específicas para os aplicativos "Project123" e "Project456". A tarefa de build garante que todas as edições salvas sejam compiladas e representadas no arquivo .dll correspondente anexado ao depurador.
"version": "2.0.0",
"tasks": [
{
"label": "buildProject123",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project123/Project123.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildProject456",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project456/Project456.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
Com as atualizações para os arquivos launch.json e tasks.json em vigor, a exibição EXECUÇÃO E DEPURAÇÃO mostra as opções de inicialização para depuração do aplicativo Project123 ou Project456. A captura de tela a seguir mostra os nomes das configurações de inicialização exibidas na lista suspensa de configuração de inicialização:
Recapitulação
Estes são dois pontos importantes desta unidade que você deve se lembrar:
- As configurações de inicialização são usadas para especificar atributos como
name,type,request,preLaunchTask,programeconsole. - Os desenvolvedores podem editar uma configuração de inicialização para acomodar os requisitos do projeto.