Instalação e Uso de Debugger e Valgrind no macOS

Esse é um curto tutorial para instalar e usar um debugger e o Valgrind no macOS, principalmente para máquinas com processador arm64 (como o chip M1). A ideia é mais prover links de tutoriais das partes necessárias do que dar todos os detalhes.

Clang e LLDB

O caminho mais fácil para compilar e debuggar no macOS é através do clang e do lldb ao invés de usar o gcc e o gdb. Para instalá-los, basta instalar o Xcode Command Line Tools através do seguinte comando no terminal:

xcode-select --install

A partir deste ponto, se você escrever gcc no terminal, na verdade você estará utilizando o clang.

Agora já é possível debuggar um programa com o lldb no terminal de forma parecida como é feito com o gdb no terminal.

Um tutorial muito inicial de como usar o lldb está nesse link. Aqui você encontra um tutorial mais completo. Talvez ajude também ver o meu tutorial de gdb.

É totalmente possível debuggar diretamente no terminal. Eu mesmo já fiz muito isso, basta aprender os comandos e ele inclusive vai mostrando o trecho do código em que está.

Mas é mais fácil usar o debugger no Visual Studio Code. Para isso, instale o plugin CodeLLDB.

Para cada projeto que você for fazer (tarefa/laboratório da disciplina), você precisará também criar uma pasta chamada .vscode com dois arquivos dentro: launch.json e tasks.json.

Você precisa alterar o seguinte trecho do arquivo launch.json para trocar exemplo pelo nome do seu executável:

"program": "exemplo"

Isso deve fazer que o lldb funcione no seu projeto.

Valgrind

Aparentemente, ainda não é possível usar o Valgrind de maneira fácil no macOS com processador arm64. Existe uma outra ferramenta chamada leaks que parece ser a forma mais fácil de detectar vazamentos de memória.

Outra forma possível é usar o valgrind utilizando Docker. Basta seguir esse tutorial. O bom dessa alternativa é que você pode também usar o gdb e o gcc se quiser. Mas não é algo integrado com o VSCode.

Vídeo

Este é um vídeo indicado por uma aluna da disciplina que foi útil para ela.