Quem que trabalha com C/C++ nunca se deparou com um erro chato de Falha de segmentação ? Suas irritações podem acabar quando você utilizar o GDB: The GNU Project Debugger
O GDB, o depurador do GNU Project, permite que você veja o que está acontecendo dentro de outro programa enquanto ele é executado - ou o que outro programa estava fazendo no momento em que caiu.
O GDB pode fazer quatro tipos principais de coisas (além de outras coisas) para ajudá-lo a detectar bugs:
Esses programas podem estar em execução na mesma máquina que o GDB (nativo), em outra máquina (remota) ou em um simulador. O GDB pode ser executado nas variantes UNIX e Microsoft Windows mais populares, bem como no macOS.
O GDB suporta os seguintes idiomas (em ordem alfabética):
A maioria dos sistemas baseados em UNIX como Linux e BSD possui o GDB no repositório das distros, então basta você instalar via o comando de instalação de pacotes da sua distro, exemplo no Gentoo
Bom, o problema mais comum fica geralmente fica confuso do programador descobrir é a famosa Falha de segmentação . Vejamos aqui um exemplo.
Supondo que você possua o seguinte código escrito em C++ :
E seu cófigo compila normalmente sem erros ou warnings, mas quando você tentar rodar, obtém a falha de segmentação:
Ou seja, fica ainda mais difícil sem a ajuda do compilador, é aí que entra o trabalho do GDB!
run
dentro do GDB e percebemos que ele não mostra muito sobre o erro, nem usando o comando backtrace
.
Para saber mais sobre os comandos do GDB rode o comando
help
-g3
que removemos a otimização do compilador e ficará mais fácil de verificar. Mas antes tente o comando frame
e também o info line *$rip
do GDB:
Para sair do GDB tecle
quit
Recompilei com o -g3
e pronto, está lá o erro é na linha 6 e verificando percebemos que o ponteiro está NULO 😀️
Talvez esse exemplo ou a simplicidade do mesmo dificultou um pouco de ver o poder do GDB. Mas posso lhe garantir que ele já me salvou várias vezes.
Para mais informações use o manual e o help do GDB:
Valeu!
gnu memtool cpp linguagemc programacao