Desenvolvimento/FAQs/FAQ sobre debug

Jump to: navigation, search
This page is a translated version of the page Development/FAQs/Debugging FAQ and the translation is 97% complete.

Other languages:
Ελληνικά • ‎English • ‎日本語 • ‎polski • ‎português do Brasil • ‎Türkçe

Geral

Como evitar o Dr. Konqi?

Você deve configurar a variável de ambiente KDE_DEBUG (para 1 ou qualquer outro valor).

Para restaurar o Dr. Konqi, remova a variável de ambiente KDE_DEBUG.

Exemplo:

  • Para evitar o Dr. Konqi:
export KDE_DEBUG=1
  • Para ver o Dr. Konqi:
unset KDE_DEBUG

Como mudar o Dr. Konqi para o modo de desenvolvedor?

Edite o arquivo $KDEHOME/share/config/drkonqirc e adicione o seguinte:

[drkonqi]
ConfigName=developer

O que é um core file? Como obtê-lo?

Um core file é uma imagem da memória no momento em que sua aplicação quebrou. Utilizando este arquivo, você pode determinar quais variáveis estavam configuradas e em que ponto a aplicação quebrou.

Algumas distribuições desativam a produção de core files. Para ativa-los novamente, utilize o comando ulimit -c unlimited.

Após obter o core file de um crash, você pode examina-lo com o comando gdb nomeapp core. Isso fará o gdb abrir o core file para a aplicação fornecida. Um vez no prompt do gdb, o comando mais útil é bt, que produz um backtrace do crash. Para mais informações sobre o uso do gdb, veja esta página

Quais ferramentas estão disponíveis para debugar meu aplicativo?

kDebug() (kdDebug() no KDE3) são maneiras simples, porém eficientes de debugar uma aplicação.

  • gdb, o debugador GNU, é a maneira mais rápida de executar a aplicação passo-a-passo e investigar suas variáveis (são recomendadas as versões do gdb >= 6.x)
  • Valgrind
  • kdbg é um frontend gráfico para o gdb com interface KDE. Suporta diversos tipos Qt (incluindo QString) .
  • Rastreador de vazamentos de memória: Veja kdesdk/kmtrace. O README explica o processo.
  • qdbus e dbusviewer, do Qt permitem navegar e efetivar chamadas pelo barramento DBus.

Verifique esta página no kdesdk, há muitos scripts úteis lá.

Como faço para exibir um QString no gdb?

Baixe o kdesdk, e adicione a seguinte linha ao seu ~/.gdbinit :

source /caminho/para/fontes/do/kdesdk/scripts/kde-devel-gdb

Você poderá então utilizar printqstring myqstring no gdb para ver seu conteúdo. Por exemplo, QString myqstring = QString::fromLatin1("contents"); pode ser examinada usando

(gdb) printqstring myqstring
$1 = "content"

Veja o arquivo kde-devel-gdb para descobrir outras macros definidas.

Eu não tenho nenhum símbolo quando debugo um aplicativo que utiliza uma kpart, o que devo fazer?

Você deve parar imediatamente após a main para carregar os símbolos de debug da biblioteca compartilhada. Depois disso, você pode debugar normalmente. Também é possível criar uma macro para o gdb, de forma que ele pare assim que a parte for carregada. Para o kword, por exemplo, eu utilizo:

define startkword
break main
run
break 'KoDocument::KoDocument(int, QWidget *, char const *, 
                       QObject *, char const *, bool)' cont

Como debugo um ioslave?

Veja debugando ioslaves

Por que minha conexão entre sinal e slot não está funcionando?

Aqui estão alguns passos que você pode seguir parar descobrir o motivo da sua conexão sinal/slot não estar funcionando (por algum motivo o slot não é chamado).

1 Verifique se o connect ( ) não imprime algum alerta no console durante a execução.

Se imprimir, verifique se a macro Q_OBJECT foi utilizada, se os nomes dos parâmetros não estão no connect, se os tipos dos parâmetros são compatíveis, se o slot está definido e se o moc foi compilado.

1b Ou você pode simplesmente verificar o que o connect ( ) retorna como um bool. Note que isso não fornecerá a mensagem de erro. 2 Verifique se o sinal foi realmente emitido 3 Verifique se o receptor não foi deletado antes de receber o sinal 4 Verifique se emissor ->signalsBlocked( ) retorna false

Há uma maneira preferencial para imprimir dados de debug na stderr?

Yes; see this tutorial.


This page was last modified on 11 March 2016, at 10:25. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2 unless otherwise noted.