{"id":1055,"date":"2026-08-20T08:00:00","date_gmt":"2026-08-20T11:00:00","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/?p=1055"},"modified":"2026-08-13T14:26:50","modified_gmt":"2026-08-13T17:26:50","slug":"debugging-com-ia-tecnicas-que-economizam-horas","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/debugging-com-ia-tecnicas-que-economizam-horas\/","title":{"rendered":"Debugging com IA: T\u00e9cnicas que Economizam Horas de Investiga\u00e7\u00e3o"},"content":{"rendered":"<p>S\u00e3o 23h47. A build passou, os testes unit\u00e1rios est\u00e3o verdes, o deploy foi feito em homologa\u00e7\u00e3o \u2014 e, mesmo assim, o sistema est\u00e1 devolvendo um valor errado em uma tela que ningu\u00e9m tocou nos \u00faltimos tr\u00eas meses. Voc\u00ea abre o debugger, coloca breakpoints em cinco pontos diferentes, imprime vari\u00e1veis no console, revisita a l\u00f3gica de neg\u00f3cio pela quarta vez e ainda n\u00e3o encontra a causa. O rel\u00f3gio corre, o time de suporte j\u00e1 perguntou duas vezes &#8220;e a\u00ed, j\u00e1 achou?&#8221;, e a sensa\u00e7\u00e3o \u00e9 a de estar cavando um t\u00fanel sem saber exatamente em qual dire\u00e7\u00e3o.<\/p>\n<p>Esse cen\u00e1rio \u00e9 familiar para qualquer desenvolvedor com alguns anos de estrada. Debugging tradicional \u00e9, em boa parte das vezes, um processo de tentativa e erro guiado por intui\u00e7\u00e3o e experi\u00eancia acumulada. O problema \u00e9 que intui\u00e7\u00e3o n\u00e3o escala e experi\u00eancia leva anos para se formar. A boa not\u00edcia \u00e9 que, hoje, \u00e9 poss\u00edvel transformar parte desse processo de investiga\u00e7\u00e3o artesanal em um processo assistido, mais r\u00e1pido e mais estruturado, com o apoio de ferramentas de IA. N\u00e3o se trata de terceirizar o racioc\u00ednio, mas de usar a IA como um investigador auxiliar que varre hip\u00f3teses, contextualiza stack traces e sugere pontos de instrumenta\u00e7\u00e3o \u2014 enquanto voc\u00ea mant\u00e9m o controle da decis\u00e3o final.<\/p>\n<p>Neste artigo, vamos explorar t\u00e9cnicas concretas de debugging com IA, com exemplos de c\u00f3digo em diferentes linguagens, mostrando como reduzir o tempo entre &#8220;algo est\u00e1 errado&#8221; e &#8220;encontrei a causa raiz&#8221;.<\/p>\n<h2>Por que o debugging tradicional consome tanto tempo<\/h2>\n<p>Antes de falar sobre solu\u00e7\u00f5es, vale entender por que esse processo \u00e9 t\u00e3o custoso. Depurar um bug envolve, essencialmente, formular hip\u00f3teses sobre onde o problema pode estar, testar cada hip\u00f3tesse e refinar o entendimento a cada itera\u00e7\u00e3o. \u00c9 um processo de busca em um espa\u00e7o de possibilidades que, em sistemas complexos, pode ser enorme.<\/p>\n<ul>\n<li>O contexto do bug (logs, stack trace, c\u00f3digo-fonte, hist\u00f3rico de mudan\u00e7as) est\u00e1 espalhado em lugares diferentes.<\/li>\n<li>A mem\u00f3ria do desenvolvedor sobre decis\u00f5es tomadas seis meses atr\u00e1s j\u00e1 se apagou.<\/li>\n<li>Bugs intermitentes ou dependentes de estado s\u00e3o dif\u00edceis de reproduzir de forma determin\u00edstica.<\/li>\n<li>Mensagens de erro gen\u00e9ricas (&#8220;NullReferenceException&#8221;, &#8220;undefined is not a function&#8221;) escondem a causa real.<\/li>\n<\/ul>\n<p>A IA generativa ataca justamente esse problema de agrega\u00e7\u00e3o de contexto e formula\u00e7\u00e3o de hip\u00f3teses. Ela n\u00e3o substitui o racioc\u00ednio do desenvolvedor, mas acelera drasticamente as etapas de an\u00e1lise e correla\u00e7\u00e3o de informa\u00e7\u00f5es.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> o pesquisador Andreas Zeller, autor do cl\u00e1ssico <a href=\"https:\/\/www.debuggingbook.org\/\" target=\"_blank\" rel=\"noopener\">&#8220;The Debugging Book&#8221;<\/a>, define debugging como um processo cient\u00edfico: observar, hipotetizar, testar, repetir. A IA encaixa perfeitamente nesse ciclo, atuando como aceleradora da fase de hip\u00f3tese.<\/p><\/blockquote>\n<h2>T\u00e9cnica 1: Debugging por contexto completo (n\u00e3o por trecho isolado)<\/h2>\n<p>O erro mais comum ao usar IA para debugging \u00e9 colar apenas a linha que deu erro. Isso \u00e9 equivalente a pedir a um m\u00e9dico um diagn\u00f3stico mostrando s\u00f3 o dedo do paciente. O ideal \u00e9 fornecer contexto suficiente: a mensagem de erro completa, o stack trace, o trecho de c\u00f3digo relevante e, se poss\u00edvel, o comportamento esperado versus o observado.<\/p>\n<h3>Exemplo pr\u00e1tico em Python<\/h3>\n<p>Considere este trecho de c\u00f3digo com um bug sutil relacionado a mutabilidade de listas:<\/p>\n<pre><code class=\"language-python\">def processar_pedidos(pedidos, historico=[]):\n    for pedido in pedidos:\n        if pedido[\"status\"] == \"pago\":\n            historico.append(pedido)\n    return historico\n\n# Chamada 1\nresultado1 = processar_pedidos([{\"status\": \"pago\"}])\nprint(len(resultado1))  # 1\n\n# Chamada 2\nresultado2 = processar_pedidos([{\"status\": \"pago\"}])\nprint(len(resultado2))  # Esperado: 1, mas retorna 2\n<\/code><\/pre>\n<p>Ao levar esse c\u00f3digo para uma IA como o <a href=\"https:\/\/www.anthropic.com\/claude\" target=\"_blank\" rel=\"noopener\">Claude<\/a> ou o <a href=\"https:\/\/openai.com\/chatgpt\" target=\"_blank\" rel=\"noopener\">ChatGPT<\/a>, o prompt ideal n\u00e3o \u00e9 &#8220;por que isso n\u00e3o funciona?&#8221;, mas algo estruturado assim:<\/p>\n<pre><code>Contexto: fun\u00e7\u00e3o Python que acumula pedidos pagos em uma lista.\nComportamento esperado: cada chamada deve retornar apenas os pedidos passados naquela chamada.\nComportamento observado: chamadas subsequentes acumulam resultados de chamadas anteriores.\nC\u00f3digo: [colar o trecho completo]\nPergunta: qual \u00e9 a causa raiz e como corrigir sem alterar a assinatura da fun\u00e7\u00e3o?\n<\/code><\/pre>\n<p>Com esse n\u00edvel de detalhe, a IA identifica rapidamente o problema cl\u00e1ssico de <em>mutable default argument<\/em> em Python \u2014 o par\u00e2metro <code>historico=[]<\/code> \u00e9 avaliado uma \u00fanica vez na defini\u00e7\u00e3o da fun\u00e7\u00e3o, e a mesma lista \u00e9 reutilizada entre chamadas. A corre\u00e7\u00e3o sugerida normalmente ser\u00e1:<\/p>\n<pre><code class=\"language-python\">def processar_pedidos(pedidos, historico=None):\n    if historico is None:\n        historico = []\n    for pedido in pedidos:\n        if pedido[\"status\"] == \"pago\":\n            historico.append(pedido)\n    return historico\n<\/code><\/pre>\n<p>O ganho de tempo aqui n\u00e3o est\u00e1 apenas na resposta, mas na elimina\u00e7\u00e3o da fase de &#8220;ficar olhando o c\u00f3digo sem ver o \u00f3bvio&#8221; \u2014 algo que a IA, sem o vi\u00e9s de familiaridade com o pr\u00f3prio c\u00f3digo, frequentemente identifica mais r\u00e1pido.<\/p>\n<h2>T\u00e9cnica 2: An\u00e1lise de stack trace com correla\u00e7\u00e3o de c\u00f3digo<\/h2>\n<p>Stack traces s\u00e3o ricos em informa\u00e7\u00e3o, mas exigem trabalho manual de correla\u00e7\u00e3o entre a pilha de chamadas e o c\u00f3digo-fonte. Ferramentas como o <a href=\"https:\/\/www.cursor.com\/\" target=\"_blank\" rel=\"noopener\">Cursor<\/a> e o <a href=\"https:\/\/claude.com\/product\/claude-code\" target=\"_blank\" rel=\"noopener\">Claude Code<\/a> conseguem ler o stack trace, navegar pelo reposit\u00f3rio e correlacionar automaticamente cada frame com o trecho de c\u00f3digo correspondente \u2014 algo que, feito manualmente, consome v\u00e1rios minutos em projetos grandes.<\/p>\n<h3>Exemplo pr\u00e1tico em Java<\/h3>\n<pre><code class=\"language-java\">Exception in thread \"main\" java.lang.NullPointerException:\n    Cannot invoke \"String.length()\" because \"nome\" is null\n        at com.empresa.pedidos.ValidadorPedido.validar(ValidadorPedido.java:34)\n        at com.empresa.pedidos.ServicoPedido.processar(ServicoPedido.java:21)\n        at com.empresa.pedidos.Main.main(Main.java:15)\n<\/code><\/pre>\n<p>Em vez de abrir manualmente tr\u00eas arquivos e rastrear a origem do valor nulo, o prompt para uma ferramenta agentic pode ser:<\/p>\n<pre><code>Recebi esta exce\u00e7\u00e3o em produ\u00e7\u00e3o: [colar stack trace completo].\nAnalise os arquivos ValidadorPedido.java, ServicoPedido.java e Main.java do projeto.\nIdentifique de onde \"nome\" chega nulo e proponha uma corre\u00e7\u00e3o com valida\u00e7\u00e3o defensiva,\nmantendo compatibilidade com os testes existentes em ValidadorPedidoTest.java.\n<\/code><\/pre>\n<p>Como essas ferramentas t\u00eam acesso direto ao reposit\u00f3rio, elas n\u00e3o apenas explicam o erro, mas rastreiam a origem do dado nulo atrav\u00e9s de m\u00faltiplas camadas \u2014 algo que, em c\u00f3digo legado com muitas depend\u00eancias, pode representar economia real de horas.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> o livro <a href=\"https:\/\/pragprog.com\/titles\/dhttdp\/debug-it\/\" target=\"_blank\" rel=\"noopener\">&#8220;Debug It!&#8221;<\/a>, de Paul Butcher, defende a t\u00e9cnica de &#8220;reduzir para o menor caso reprodut\u00edvel&#8221; antes de investigar. Combine isso com IA: pe\u00e7a a ela para gerar um caso m\u00ednimo de reprodu\u00e7\u00e3o a partir do stack trace, antes de pedir a corre\u00e7\u00e3o.<\/p><\/blockquote>\n<h2>T\u00e9cnica 3: Debugging de bugs intermitentes com gera\u00e7\u00e3o de hip\u00f3teses<\/h2>\n<p>Bugs intermitentes \u2014 que ocorrem &#8220;de vez em quando&#8221; \u2014 s\u00e3o os mais custosos, porque n\u00e3o \u00e9 poss\u00edvel simplesmente colocar um breakpoint e esperar. Aqui, a IA \u00e9 \u00fatil como gerador de hip\u00f3teses test\u00e1veis, listando poss\u00edveis causas por ordem de probabilidade, com base em padr\u00f5es conhecidos.<\/p>\n<h3>Exemplo pr\u00e1tico em JavaScript\/Node.js<\/h3>\n<pre><code class=\"language-javascript\">async function buscarUsuario(id) {\n  const cache = await redis.get(`usuario:${id}`);\n  if (cache) return JSON.parse(cache);\n\n  const usuario = await db.query('SELECT * FROM usuarios WHERE id = ?', [id]);\n  redis.set(`usuario:${id}`, JSON.stringify(usuario), 'EX', 60);\n  return usuario;\n}\n<\/code><\/pre>\n<p>O sintoma relatado: &#8220;\u00e0s vezes o usu\u00e1rio aparece com dados antigos depois de uma atualiza\u00e7\u00e3o&#8221;. Um prompt eficaz para gerar hip\u00f3teses seria:<\/p>\n<pre><code>Este c\u00f3digo implementa cache-aside com Redis para buscar usu\u00e1rios.\nSintoma intermitente: dados desatualizados aparecem ap\u00f3s updates.\nListe as hip\u00f3teses mais prov\u00e1veis de causa, ordenadas por probabilidade,\nconsiderando condi\u00e7\u00f5es de corrida, invalida\u00e7\u00e3o de cache e TTL.\nPara cada hip\u00f3tese, sugira um teste espec\u00edfico para confirm\u00e1-la ou descart\u00e1-la.\n<\/code><\/pre>\n<p>Uma resposta bem estruturada normalmente aponta para a aus\u00eancia de invalida\u00e7\u00e3o de cache no momento do update \u2014 o c\u00f3digo provavelmente tem uma fun\u00e7\u00e3o <code>atualizarUsuario<\/code> que grava no banco, mas n\u00e3o remove ou atualiza a chave correspondente no Redis, deixando o cache &#8220;stale&#8221; at\u00e9 o TTL expirar. A corre\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-javascript\">async function atualizarUsuario(id, dados) {\n  await db.query('UPDATE usuarios SET ? WHERE id = ?', [dados, id]);\n  await redis.del(`usuario:${id}`); \/\/ invalida\u00e7\u00e3o expl\u00edcita\n}\n<\/code><\/pre>\n<p>O valor dessa t\u00e9cnica est\u00e1 em transformar um sintoma vago em uma lista de hip\u00f3teses concretas e test\u00e1veis, o que reduz o n\u00famero de ciclos de tentativa e erro.<\/p>\n<h2>T\u00e9cnica 4: Instrumenta\u00e7\u00e3o guiada por IA (logging estrat\u00e9gico)<\/h2>\n<p>Quando o bug n\u00e3o tem stack trace nem reprodu\u00e7\u00e3o clara, a sa\u00edda costuma ser adicionar logs \u2014 mas onde? Adicionar logs em excesso poluiu o output; adicionar poucos n\u00e3o revela nada. A IA pode sugerir pontos estrat\u00e9gicos de instrumenta\u00e7\u00e3o com base na estrutura do c\u00f3digo.<\/p>\n<h3>Exemplo pr\u00e1tico em Delphi (Object Pascal)<\/h3>\n<pre><code class=\"language-pascal\">function TCalculadoraFrete.CalcularFrete(APeso, ADistancia: Double): Double;\nvar\n  LTaxaBase: Double;\nbegin\n  LTaxaBase := ObterTaxaBase(ADistancia);\n  Result := LTaxaBase * APeso;\n\n  if ADistancia &gt; 500 then\n    Result := Result * 1.15; \/\/ adicional de longa dist\u00e2ncia\nend;\n<\/code><\/pre>\n<p>Sintoma relatado: &#8220;o frete para algumas dist\u00e2ncias espec\u00edficas est\u00e1 sendo calculado errado, mas n\u00e3o consigo identificar o padr\u00e3o&#8221;. Um prompt direcionado:<\/p>\n<pre><code>Esta fun\u00e7\u00e3o calcula frete com base em peso e dist\u00e2ncia.\nExiste uma discrep\u00e2ncia intermitente relatada por clientes, mas sem padr\u00e3o claro identificado.\nSugira pontos estrat\u00e9gicos de log (com WriteLn ou um logger estruturado)\npara capturar valores intermedi\u00e1rios sem poluir a sa\u00edda,\npriorizando ObterTaxaBase e o c\u00e1lculo do adicional de longa dist\u00e2ncia.\n<\/code><\/pre>\n<p>A IA tende a sugerir instrumentar exatamente a fronteira entre <code>ObterTaxaBase<\/code> e o multiplicador condicional \u2014 muitas vezes o bug est\u00e1 em arredondamento de ponto flutuante na compara\u00e7\u00e3o <code>ADistancia &gt; 500<\/code>, quando a dist\u00e2ncia chega como <code>500.0000001<\/code> devido a convers\u00f5es de unidade em outra camada do sistema. Um log estrat\u00e9gico ali revela o valor exato antes da compara\u00e7\u00e3o, evitando instrumentar a fun\u00e7\u00e3o inteira:<\/p>\n<pre><code class=\"language-pascal\">function TCalculadoraFrete.CalcularFrete(APeso, ADistancia: Double): Double;\nvar\n  LTaxaBase: Double;\nbegin\n  LTaxaBase := ObterTaxaBase(ADistancia);\n  TLogger.Debug(Format('Distancia recebida: %.10f', [ADistancia]));\n\n  Result := LTaxaBase * APeso;\n\n  if ADistancia &gt; 500 then\n    Result := Result * 1.15;\nend;\n<\/code><\/pre>\n<h2>T\u00e9cnica 5: Usando IA para revisar hip\u00f3teses descartadas (o &#8220;segundo par de olhos&#8221;)<\/h2>\n<p>Uma t\u00e9cnica subestimada \u00e9 usar a IA n\u00e3o para encontrar o bug do zero, mas para revisar as hip\u00f3teses que voc\u00ea j\u00e1 descartou. \u00c9 comum, depois de horas de investiga\u00e7\u00e3o, entrar em um &#8220;t\u00fanel mental&#8221; e ignorar uma possibilidade \u00f3bvia porque ela j\u00e1 foi &#8220;eliminada&#8221; precocemente.<\/p>\n<pre><code>J\u00e1 investiguei e descartei estas hip\u00f3teses para o bug X: [listar].\nAqui est\u00e1 o c\u00f3digo relevante e os logs coletados at\u00e9 agora: [colar].\nRevise minhas hip\u00f3teses descartadas \u2014 alguma delas foi eliminada\ncom evid\u00eancia insuficiente? Existe alguma hip\u00f3tese que eu n\u00e3o considerei?\n<\/code><\/pre>\n<p>Esse prompt for\u00e7a a IA a atuar como um revisor cr\u00edtico, e \u00e9 surpreendente a frequ\u00eancia com que ela identifica que uma hip\u00f3tese foi descartada com base em um teste malfeito, n\u00e3o porque estava de fato errada.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> essa pr\u00e1tica se relaciona com o conceito de &#8220;rubber duck debugging&#8221; \u2014 explicar o problema em voz alta (ou para um pato de borracha) frequentemente revela a solu\u00e7\u00e3o. A IA \u00e9, na pr\u00e1tica, um &#8220;pato de borracha&#8221; que responde de volta com perguntas e hip\u00f3teses relevantes.<\/p><\/blockquote>\n<h2>Boas pr\u00e1ticas para n\u00e3o errar a m\u00e3o no debugging assistido por IA<\/h2>\n<ul>\n<li><strong>Nunca aceite a corre\u00e7\u00e3o sem entender a causa raiz.<\/strong> Se a IA corrigir o sintoma sem voc\u00ea entender o porqu\u00ea, o bug provavelmente volta em outra forma.<\/li>\n<li><strong>Sempre valide com teste automatizado.<\/strong> Depois de corrigir, escreva (ou pe\u00e7a \u00e0 IA para escrever) um teste que reproduza o bug original e comprove a corre\u00e7\u00e3o.<\/li>\n<li><strong>Cuidado com dados sens\u00edveis em logs e prompts.<\/strong> Nunca cole stack traces ou payloads com dados de clientes reais em ferramentas de IA sem anonimiza\u00e7\u00e3o.<\/li>\n<li><strong>Prefira ferramentas com acesso ao reposit\u00f3rio<\/strong> (como Claude Code ou Cursor) para bugs que envolvem m\u00faltiplos arquivos \u2014 o contexto autom\u00e1tico economiza tempo comparado a copiar e colar manualmente.<\/li>\n<\/ul>\n<h2>Junte-se \u00e0 Comunidade Dev&#8217;s AI<\/h2>\n<p>Debugging assistido por IA \u00e9 uma habilidade que se refina com pr\u00e1tica e troca de experi\u00eancias. Cada bug resolvido com uma t\u00e9cnica nova \u00e9 conhecimento que vale a pena compartilhar \u2014 e \u00e9 exatamente esse o esp\u00edrito da <strong>Comunidade Dev&#8217;s AI<\/strong>: desenvolvedores de diferentes stacks trocando prompts, t\u00e9cnicas de investiga\u00e7\u00e3o, casos reais de bugs dif\u00edceis e as solu\u00e7\u00f5es encontradas com o apoio de ferramentas de IA.<\/p>\n<p>Se voc\u00ea quer acelerar sua curva de aprendizado em debugging com IA, discutir casos reais e ter acesso a materiais pr\u00e1ticos, participe da comunidade: <a href=\"https:\/\/adrianosantos.link\/ComunidadeDevAI\" target=\"_blank\" rel=\"noopener\">https:\/\/adrianosantos.link\/ComunidadeDevAI<\/a>.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Debugging sempre foi, e continuar\u00e1 sendo, um exerc\u00edcio de racioc\u00ednio investigativo. O que mudou \u00e9 a velocidade com que conseguimos formular e testar hip\u00f3teses. As t\u00e9cnicas apresentadas aqui \u2014 fornecer contexto completo, correlacionar stack traces automaticamente, gerar hip\u00f3teses ordenadas por probabilidade, instrumentar de forma estrat\u00e9gica e usar a IA como revisor cr\u00edtico das pr\u00f3prias conclus\u00f5es \u2014 n\u00e3o eliminam a necessidade de conhecimento t\u00e9cnico s\u00f3lido, mas comprimem drasticamente o tempo entre o sintoma e a causa raiz.<\/p>\n<p>A pr\u00f3xima vez que voc\u00ea estiver \u00e0s 23h47 encarando um bug que n\u00e3o faz sentido, lembre-se: o problema provavelmente tem uma explica\u00e7\u00e3o l\u00f3gica, e a IA pode ajudar a chegar at\u00e9 ela muito mais r\u00e1pido do que o m\u00e9todo de tentativa e erro isolado. O segredo est\u00e1 em usar essas ferramentas como parceiras de investiga\u00e7\u00e3o \u2014 n\u00e3o como uma caixa m\u00e1gica que resolve tudo sem escrut\u00ednio.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>S\u00e3o 23h47. A build passou, os testes unit\u00e1rios est\u00e3o verdes, o deploy foi feito em homologa\u00e7\u00e3o \u2014 e, mesmo assim, o sistema est\u00e1 devolvendo um valor errado em uma tela que ningu\u00e9m tocou nos \u00faltimos tr\u00eas meses. Voc\u00ea abre o debugger, coloca breakpoints em cinco pontos diferentes, imprime vari\u00e1veis no console, revisita a l\u00f3gica de [&hellip;]<\/p>\n","protected":false},"author":127,"featured_media":1056,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/127"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1055"}],"version-history":[{"count":1,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1055\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1055\/revisions\/1057"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/1056"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}