2023-06-11 – Procurando Memory Leaks no Knowledge Tester em C++ com o Memcheck da Valgrind…
Procurando Memory Leaks no Knowledge Tester em C++ com o Memcheck da Valgrind:
Hoje partilho isto mais para amigos, para mostrar que o C++, apesar de ser super poderoso enquanto linguagem de programação, tem algumas dificuldades que já todos conhecem, como a gestão manual de memória.
E isto porque tenho andado super ocupado, sem tempo para outros projectos, por isso vou dando retoques finais à versão nova (com GUI) do meu software de formação “Knowledge Tester” (que original o nome!).
Isto faz com que, mesmo que tentemos usar o menos possível a criação de objectos na memória heap (exemplo: com keywords “new”), é normal ao programarmos rápido, termos algumas memory leaks a serem corrigidas.
Eu não tenho tido tempo para nada hoje em dia, e programo à pressa, e por vezes tenho mesmo de criar objectos na memória heap, e quando isso acontece, no fim, acabo por usar programas como o Memcheck da Valgrind, para varrer o programa e ver onde ocorrem as falhas de memória.
Normalmente, deixamos o executáver ter todos os símbolos, para que o programa nos ajude a identificar onde (em que ficheiro, linha, código, etc), ocorre uma determinada leakage de memória.
O GDB não basta para isto, esse é usado por vezes por alguns para fazer debugging ao programa (eu normalmente nem o uso, trabalho de outra forma), mas o Memcheck da Valgrind, ou como eu lhe chamo: “O Valgrind”, é excelente neste sentido.
Aqui estava eu a ver se existiam memory leaks graves por eu ter feito isto à pressa, e corrigi tudo o que aparecia de importante, e o resto deixo para o Futuro.
Atenção que há ali coisitas para corrigir hahaha, mas deixo isso para o ano que vem, pois quero estar um ano e meio sem voltar a mexer nisto, e elas não são graves.
E notem que o possibly lost não é sério, deve-se também a eu brincar com pointers de tal maneira que o programa não consegue ter certezas sobre se algo foi perdido ou não, mas não escapou ao meu controlo. E relembro que há sempre alguma fragmentação não grave de memória neste caso que é aceitável dada a natureza do programa. E já agora, os 69% do CPU quando usado, com 8 cores, corresponde apenas a 8.6% do CPU quando em esforço, num portátil apenas I5 e com vários anos. 🙂
Pois relembro que programar em C++ ou C, não é tão fácil quanto nas linguagens mais simples como Java, C#, Python, etc, é bastante mais complexo, e tudo é mais complexo, não apenas a gestão da memória (que nas outras é automática), como a detecção de erros (que nas outras indicam onde está o erro ao vez de vos darem potenciais milhares de linhas de código de erro que não dizem nada, por faltar uma simples chaveta), a abstracção do código, o ter de saber como o hardware funciona, o lidar com hardware (low-level), a sintaxe, a complexidade, etc, e neste caso, podemos ver como é o processo de busca de memory leaks, coisa que não teriam nunca de se preocupar muito se usarem C# ou Java ou outros.
Tinha no canto inferior direito o Bubble Bobble, pois tenho adorado jogar a isto nos últimos tempos (versão PC neste caso), e o meu programa Knowledge Tester, que está mais rápido e sem crashes possíveis.
Isto tudo com o maravilhoso sistema operativo Linux (Fedora 35 neste caso, que ainda não me dei ao trabalho de fazer upgrade ao mesmo).
Um dia partilho algo mais, quando tiver tempo. ?
Hasta!
2023-06-11.
Partilhado no mesmo dia no LinkedIn, no mesmo dia, em:
https://www.linkedin.com/feed/update/urn:li:share:7073726042393198592/
Post anterior, sobre o estado do desenvolvimento, em 2023-06-03, em:
Post seguinte do mesmo projecto, em: