Vitorboschi (Talk | contribs) (Created page with "Você deve parar imediatamente após a main para carregar os símbolos de depuração da biblioteca compartilhada. Depois disso, você pode depurar normalmente. Também é possí...") |
Vitorboschi (Talk | contribs) (Created page with "É recomendado que componentes e bibliotecas utilizem uma número de área de depuração, por exemplo kDebug(1234). Para isso, o número deve ser registrado em kdelibs/kdecore/k...") |
||
| Line 101: | Line 101: | ||
A sintaxe é muito parecida com a do cout, você pode utilizar muitos dos tipos nativos entre o "<<". Isso irá imprimir uma mensage de depuração, a qual será automaticamente desativada na versão final (pelo <tt>--disable-debug</tt>). Caso você queira que a mensagem permaneça na versão final, por ser um alerta ou erro, utilize <tt>kWarning()</tt> ou <tt>kError()</tt>. | A sintaxe é muito parecida com a do cout, você pode utilizar muitos dos tipos nativos entre o "<<". Isso irá imprimir uma mensage de depuração, a qual será automaticamente desativada na versão final (pelo <tt>--disable-debug</tt>). Caso você queira que a mensagem permaneça na versão final, por ser um alerta ou erro, utilize <tt>kWarning()</tt> ou <tt>kError()</tt>. | ||
| − | + | É recomendado que componentes e bibliotecas utilizem uma número de área de depuração, por exemplo kDebug(1234). Para isso, o número deve ser registrado em kdelibs/kdecore/kdebug.areas. As áreas de depuração tornam possível ativar e desativar a saída de depuração para áreas específicas utilizando o programa {{program|kdebugdialog}}, que é parte do kdebase. O <tt>kdebugdialog --fullmode</tt> também permite controlar onde a saída de depuração será escrita. Normalmente não é necessário registrar números de área para aplicações independentes, exceto quando elas são tão complexas que você queira dividir sua saída em múltiplas áreas. | |
It is possible to omit the debug area number when calling kDebug by adding the following code to your top-level CMakeLists.txt: | It is possible to omit the debug area number when calling kDebug by adding the following code to your top-level CMakeLists.txt: | ||
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:
export KDE_DEBUG=1
unset KDE_DEBUG
Edite o arquivo $KDEHOME/share/config/drkonqirc e adicione o seguinte:
[drkonqi] ConfigName=developer
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
Verifique esta página no kdesdk, há muitos scripts úteis lá.
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.
Você deve parar imediatamente após a main para carregar os símbolos de depuração da biblioteca compartilhada. Depois disso, você pode depurar 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
Veja depurando ioslaves
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
Sim, utilize kDebug():
#include <kdebug.h> kDebug() << "KMyApp just started";
A sintaxe é muito parecida com a do cout, você pode utilizar muitos dos tipos nativos entre o "<<". Isso irá imprimir uma mensage de depuração, a qual será automaticamente desativada na versão final (pelo --disable-debug). Caso você queira que a mensagem permaneça na versão final, por ser um alerta ou erro, utilize kWarning() ou kError().
É recomendado que componentes e bibliotecas utilizem uma número de área de depuração, por exemplo kDebug(1234). Para isso, o número deve ser registrado em kdelibs/kdecore/kdebug.areas. As áreas de depuração tornam possível ativar e desativar a saída de depuração para áreas específicas utilizando o programa kdebugdialog, que é parte do kdebase. O kdebugdialog --fullmode também permite controlar onde a saída de depuração será escrita. Normalmente não é necessário registrar números de área para aplicações independentes, exceto quando elas são tão complexas que você queira dividir sua saída em múltiplas áreas.
It is possible to omit the debug area number when calling kDebug by adding the following code to your top-level CMakeLists.txt:
add_definitions(-DKDE_DEFAULT_DEBUG_AREA=XXXX)
Para mais informações sobre isso, visite este artigo no blog do Allen Winter.
Para deixar claro: NÂO use qDebug, que não é desativado nas versões finais. Também é melhor evitar assert() ou kFatal(), que quebram a aplicação quando algo de errado ocorre, proporcionando uma experiência ruim ao usuário. É melhor detectar os erros, imprimir um kWarning() ou kError(), e recuperar-se quando possível.
Para obter timestamps na sua saída de depuração, que é muito útil para depurar aplicaçãos multi-thread, com acesso à rede, e que utilizam operações assíncronas, execute export KDE_DEBUG_TIMESTAMP=1 antes de executar sua aplicação. Desde KDE SC 4.5.