Para anexar o VS Code a um processo já em execução no seu Mac, use o depurador compatível com a linguagem desse processo: para Node.js, escolha Attach to Node Process na Paleta de Comandos; para C#, escolha Debug: Attach to a .NET 5+ or .NET Core process; para C/C++, crie uma configuração de anexo usando LLDB ou GDB. Esses caminhos são específicos para o runtime ou extensão. Não há um único comando do VS Code que se anexe a todos os tipos de processo.

Antes de anexar: identifique o processo e o depurador

Primeiro, identifique o que o processo executa: Node.js, .NET, C/C++ nativo ou outro runtime. O depurador Node integrado do VS Code e suas extensões de linguagem oferecem diferentes recursos de anexo; um processo que aparece no Monitor de Atividade do macOS não significa que qualquer depurador possa ser anexado a ele. Você também precisa da extensão correspondente para a linguagem. Para C/C++ nativo no macOS, a Microsoft documenta o suporte a LLDB ou GDB por meio da extensão C/C++. VS Code: Debug C++

Abra o projeto ou os arquivos-fonte correspondentes ao programa em execução. A ação de anexar conecta o depurador a um processo; ela não inicia o aplicativo, não o recompila nem garante que os pontos de interrupção possam ser vinculados. Fontes correspondentes e símbolos de depuração disponíveis são fundamentais, especialmente para programas nativos e compilações otimizadas.

Anexar a um processo Node.js em execução

No VS Code, pressione ⇧⌘P para abrir a Paleta de Comandos, execute Debug: Attach to Node Process e selecione o processo desejado no seletor rápido (Quick Pick). O seletor lista os processos candidatos e mostra seus IDs de processo e portas de depuração. O VS Code documenta esse caminho tanto para processos Node que não foram iniciados em modo de depuração quanto para processos que usam uma opção de inspeção. VS Code: Node.js debugging

Se o processo não estiver listado ou se você quiser uma configuração reproduzível, abra ou crie .vscode/launch.json e adicione uma configuração de anexo. Para um processo já em execução sem modo de depuração, use a variável seletora de ID de processo:

{
  "name": "Attach to Node process",
  "type": "node",
  "request": "attach",
  "processId": "${command:PickProcess}"
}

Selecione essa configuração em Executar e Depurar (Run and Debug) e inicie a depuração com F5. Para um processo Node já iniciado com --inspect, use em vez disso uma configuração de anexo com sua porta de depuração; o padrão do Node é 9229. Não combine processId e port: o VS Code determina a porta automaticamente ao anexar por ID de processo. Node.js debugging configuration details

Anexar a um processo .NET em execução

Instale a extensão C# da Microsoft e abra a Paleta de Comandos com ⇧⌘P. Execute Debug: Attach to a .NET 5+ or .NET Core process e, em seguida, selecione o processo de destino na lista. Esse é o caminho documentado de anexo de processo para C# no VS Code; use-o em vez de presumir que o seletor de processos ou os campos de configuração do Node se aplicam ao .NET. VS Code: C# debugging

Após anexar, defina um ponto de interrupção no código-fonte correspondente e deixe o aplicativo atingir esse código. Se o ponto de interrupção continuar desvinculado, verifique se o processo está executando a compilação correspondente ao código-fonte aberto e se há símbolos utilizáveis disponíveis. A configuração de código-fonte exato do depurador C# e as opções de símbolos podem afetar a depuração, e o ato de anexar não pode alterar retroativamente a forma como os módulos já carregados foram compilados. C# debugger settings

Anexar a um processo C ou C++ nativo

Instale a extensão C/C++ da Microsoft e use uma configuração de anexo em .vscode/launch.json. A configuração precisa do caminho do executável para que o depurador possa carregar os símbolos, de uma solicitação de anexo (attach) e de um ID de processo. A referência de configuração de C/C++ documenta ${command:pickProcess} como o seletor de processos padrão e o LLDB como um depurador disponível no macOS. C/C++ launch configuration reference

O formato mínimo de configuração para macOS é:

{
  "name": "Attach to native process",
  "type": "cppdbg",
  "request": "attach",
  "program": "${workspaceFolder}/path/to/executable",
  "processId": "${command:pickProcess}",
  "MIMode": "lldb"
}

Substitua path/to/executable pelo executável real usado pelo processo em execução. Mantenha MIMode definido como lldb para este exemplo com LLDB; o GDB possui requisitos de configuração separados no macOS. O depurador precisa do local do executável para carregar símbolos, portanto, um caminho adivinhado ou não relacionado pode tornar a depuração em nível de código-fonte inutilizável. C/C++ configuration reference

Se a anexação falhar ou os pontos de interrupção não forem atingidos

Verifique se você selecionou o processo correto, se a extensão relevante está instalada e se o processo e o depurador possuem arquiteturas compatíveis. No Apple silicon, divergências de arquitetura são documentadas especificamente como uma possível causa de erros de anexo em C#. Para C/C++, confirme se o caminho do executável e os símbolos disponíveis correspondem à compilação em execução. Se o processo pertencer a outro usuário ou for protegido pelo macOS, as permissões do sistema operacional também poderão impedir a anexação; use um processo autorizado e siga a política de segurança aplicável do macOS em vez de tentar contorná-la.

Para Node.js, use o seletor de processos específico da linguagem ou configure a porta de inspeção; uma configuração genérica de anexo C/C++ não é um substituto. Para C#, use o comando de anexo do .NET. Para C/C++ nativo, use cppdbg com LLDB ou uma instalação do GDB configurada separadamente. Essas distinções ajudam a definir o próximo passo quando uma instrução genérica de "anexar" não se adequar ao alvo.

Quando terminar, use Debug: Stop para desconectar. No modo de anexo do Node.js, o VS Code indica que a interrupção desconecta o depurador e o alvo continua em execução. Confirme o comportamento da sua extensão para outros runtimes se for importante manter o processo ativo; as sessões de anexação (attach) e inicialização (launch) não têm necessariamente o mesmo comportamento de interrupção. VS Code: Node.js debugging

Fontes