Do not speak Portuguese? Translate this site with Google or Bing Translator
Como debugar código TypeScript

Posted on: September 10, 2024 10:37 AM

Posted by: Renato

Categories: javascript TypeScript

Views: 170

Como debugar código TypeScript com o Visual Studio Code

Veja como usar o Visual Studio Code de forma eficiente para debugging em TypeScript e dê adeus ao debug com console.log.
Texto de: Marlliton Souza

Introdução

O processo de debugging é essencial para o desenvolvimento de software, pois permite identificar e corrigir erros no código. Muitas vezes, usamos o console.log que cumpre seu propósito, porém, em projetos maiores, essa abordagem pode ser muito ineficiente.

Utilizar um debugger para analisar fluxos e encontrar erros ou valores inesperados é muito mais produtivo e neste artigo, veremos como configurar o VS Code para debugar código TypeScript no contexto do Node.js.

Criando um projeto

Para este exemplo, criaremos um projeto bem simples, já que o foco aqui não é o código e sim a configuração do debug para podermos analisar fluxos e encontrar problemas. Você pode seguir as instruções abaixo para confiugrar o projeto:

  1. Crie uma pasta debug para o projeto e abra-a no VSCode.
  2. Inicie o projeto com os seguintes comandos:
npm init -y
npm install --save-dev typescript
npx tsc --init
  1. Crie uma pasta src para colocar o código. No final, sua estrutura deve ser semelhante a esta:

Executando código

Crie um arquivo dentro da pasta src chamado index.ts e em seguida adicione o seguinte código nele:

type User = {
  name: string;
  age: number;
  isAdmin: boolean;
};

function greet(user: User): string {
  if (user.isAdmin) {
    return `Hello, Admin ${user.name}`;
  } else {
    return `Hello, ${user.name}`;
  }
}

const user: User = {
  name: 'Alice',
  age: 30,
  isAdmin: false
};

const msg = greet(user) 

Nós podemos tentar executar esse código com o nodejs via terminal (node ./src/index.ts), o que não dará certo, pois o node não entende a sintaxe do TypeScript.

Então, para facilitar a execução do código, podemos usar uma biblioteca ao invés de usar o node. Para isso, execute o seguinte comando no terminal:

npx tsx src/index.ts 

O problema

Imagine que você espera que o usuário receba a mensagem Hello, Admin ${user.name}, mas por algum motivo ele está recebendo Hello, ${user.name}.

Neste exemplo, nós já sabemos onde está o problema só de olhar o código, mas em projetos maiores, não é isso que acontece. Pensando que o problema não seja tão óbvio, podemos pensar em colocar um console.log na função greet para vermos se o que está sendo recebido por ela é realmente o que a gente espera.

type User = {
  name: string;
  age: number;
  isAdmin: boolean;
};

function greet(user: User): string {
  if (user.isAdmin) {
    console.log("É admin")
    return `Hello, Admin ${user.name}`;
  } else {
    console.log("Não é admin")
    return `Hello, ${user.name}`;
  }
}

const user: User = {
  name: 'Alice',
  age: 30,
  isAdmin: false
};


const msg = greet(user)
console.log("Mensagem::", msg) 

Neste exemplo, já conseguimos identificar o problema, mas caso isso não acontecesse, iriamos para um nível superior no código colocar mais um console.log, e depois para o nível superior de novo e de novo até encontramos o problema. Isso é chato e repetitivo, além de nada produtivo, apesar de funcional.

Configurando o debugger

A configuração do debugger no VSCode é simples. Abra o menu lateral de debugging pressionando Ctrl + Shift + D ou clicando no ícone de inseto na barra lateral esquerda e depois em create a launch.json file.

Em seguida selecione Node.js:

Nesse momento, um arquivo será criado automaticamente pelo Visual Studio Code em seu projeto e será armazenado em .vscode/launch.json.

Dentro dele, terá uma configuração inicial bem simples:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}/src/index.ts",
      "outFiles": [
        "${workspaceFolder}/**/*.js"
      ]
    }
  ]
} 

Vamos adicionar algumas opções para ser possível executar o debugger corretamente:

Rodando o código com o debug

Agora, podemos adicionar um ou mais break points no nosso código clicando ao lado dos números das linhas. Esses break points são pontos onde o nosso código será "pausado" para podermos analisar melhor o que está acontecendo.

Após definir os break points, podemos executar o código utilizando o debugger. Para isso, pressione F5 no seu teclado, ou clique em run > start debugging:

O código será executado com o debugger e parará nos pontos predeterminados. Com isso, você pode verificar os valores das variáveis, retornos de funções, parâmetros, etc.

Perceba que o código parou a execução na linha 3 e já me mostra todos os valores do objeto "user". Nós também podemos verificar o retorno da função, basta clicar na segunda opção (step over) do menu que aparece no canto superior direito do print. No seu VS Code provavelmente esse menu estará centralizado.

Outra possibilidade é ficar observando valores de variáveis, como, por exemplo, a variável msg. Nese caso podemos adicionar essa variável na seção WATCH do menu debug e veremos que o retorno é “Hello, Alice”:

Conclusão

Com essa técnica de debugging, você é capaz de debugar um fluxo inteiro, ganhando muito mais agilidade e precisão na hora de debugar seu código. Também é possível debugar o código no navegador. Hoje, nosso propósito foi debugar aplicativos no contexto do Node.js, mas você pode conferir aqui se tiver interesse.

- https://blog.formacao.dev/como-debugar-codigo-typescript-com-o-visual-studio-code/

2

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email