Se você estiver usando o Qt Creator no Ubuntu 23.04
ou no Debian 12 Bookworm
, pode ser que tenha notado esse detalhe: durante o debug endereços são mostrados ao invés dos valores das variáveis locais.
Eu passei alguma raiva para achar a causa desse problema e nesse post irei compartilhar com vocês a solução.
🤔 Causa
O Qt Creator injeta, na inicialização da sessão de debug, alguns scripts Python no GDB, eles sabem como executar o pretty print
de variáveis complexas do Qt, QString
, QByteArray
, QSuaVó
e etc. Para o GDB esses tipos são apenas ponteiros e sem os scripts ele retorna por padrão seus endereços.
⚠️ Aqui é uma das razões de que, quando depuramos aplicações Qt no VS Code ele não resolve as variáveis do Qt. O VS Code não injeta esses scripts e opretty print
não acontece.
No Ubuntu 23.04
e Debian 12 Bookworm
Python 3 é a versão 3.11.x
. Nessa versão a função getargspec
do módulo inspect
foi removida, já estava marcada como deprecada e então foi enfim removida. E os scripts do Qt Creator, v9.0.2
, usam essa função.
E agora José? 🤔
Bom, fácil, vamos fazer o porte do script que usa o getargspec
. Sim, mas o problema foi chegar a conclusão, de que o problema era o uso do getargspec
. Sabe por que? Porque o GDB não reclama, sem stack trace, sem nada, ele simplesmente não funciona como deveria. Daí o jeito foi debugar, by print, e "trackear" o fluxo de execução do script.
Mas como eu sou muito bonzinho, vou poupar vocês desse trabalho e já vou compartilhar a solução.
💡 Solução
Execute o seguinte comando no terminal:
sudo sed -i 's/inspect\.getargspec/inspect.getfullargspec/g' /usr/share/qtcreator/debugger/dumper.py
Pronto, agora é só iniciar o Qt Creator e ser feliz com debug e pretty print
funcionando.
O que estamos fazendo nesse comando? Como está descrito no What's New In Python 3.11, estamos usando o getfullargspec
ao invés do getargspec
.
⚠️ Tenha certeza de ter oUse Debugging Helpers
habilitado nas configurações do Qt Creator.Edit > Preferences > Debugger > Locals & Expressions
:
Sem essa opção habilitada o Qt Creator não injeta os scripts no GDB.
Torizon VS Code Extension
Se você usa a extensão do VS Code para depurar aplicações Torizon, e está enfrentando o mesmo problema, já há uma tasks que aplica o fix no script do Qt Creator. Basta executar a task fix-debugger-helper-qt-creator
, digitar sua senha de usuário administrador e pronto.
✅ Conclusão
Até que isso seja corrigido no pacote do Qt Creator para o Debian e Ubuntu essa é uma solução. Se você usa outra distro, ou outra versão do Qt Creator, verifique se o problema é o mesmo e se for, faça o porte do script.
Esse post foi útil para você? Deixe eu saber, me contacte, siga nas redes sociais: