Project

General

Profile

Quelques trucs pour debugger

Voici quelques trucs et méthodes pratiques pour debugger. Rien de sorcier ni de révolutionnaire, mais vous pourrez y trouver un peu d'inspiration si quelque chose ne fonctionne pas comme prévu

Cas n° 1 les comptes ne s'affiche pas

C'est un cas réel qui m'a été rapporté. Les comptes ne s'affichent pas, les soldes sont corrects.

Reproduire sur une machine de test en local

  • Sauvegarder la base
  • La restaurer sur une machine de test. Si la valeur de 'encryption_key' dans la configuration est la même, vous pouvez vous connecter sur n'importe quelle machine est le comportement doit être le même. Cela permet entre autre de vérifier si vos problèmes viennent de la configuration de vote serveur, version de PHP et Mysql ou si cela provient de GVV.

Reproduire le problème

En effaçant les logs dans application/logs, vous allez limiter la quantité d'information à analyser.
  • Afficher un compte, par exemple le compte licences FFVV
  • Vérifiez le problème
  • Ouvrez le fichier de log, il ne fait que 130 lignes
  • cherchez "sql". Les requêtes base les plus significatives sont écrites dans les journaux. Il suffit de les copier/coller dans une fenêtre mysql pour vérifier leur fonctionnement.

Cherchons la requête d'affichage des comptes:

SELECT `ecritures`.`id`, `ecritures`.`annee_exercise`, `categorie`.`nom` as categorie, `date_op`, `montant`, `ecritures`.`description`, `num_cheque`, `quantite`, `achat`, `prix`, `gel`, `ecritures`.`compte1`, `compte1`.`nom` as nom_compte1, `compte1`.`codec` as code1, `ecritures`.`compte2`, `compte2`.`nom` as nom_compte2, `compte2`.`codec` as code2
FROM (`ecritures`, `categorie`, `comptes` as compte1, `comptes` as compte2)
WHERE `ecritures`.`categorie` = categorie.id and ecritures.compte1 = compte1.id and ecritures.compte2 = compte2.id and (ecritures.compte1 = "338" or ecritures.compte2 = "338") 
AND YEAR(date_op) = "2016" 
ORDER BY `date_op`, `ecritures`.`id`
LIMIT 1000000

Elle ne retourne rien, on brûle ...

On essaye quelque chose de plus simple:

select * from ecritures

Cette fois ci, cela fonctionne. Il n'y a plus qu'à faire un peu de dichotomie. On aperçoit rapidement que c'est `ecritures`.`categorie` = categorie.id qui pose problème. Une petite vérification de la table categorie, elle est vide.

Voila, les catégories, devaient être utilisées pour faire de la comptabilité analytique. Cela n'a jamais été terminé, mais cela empèche le fonctionnement du programme, s'il ne toruve pas au moins une catégorie avec un id à 0.

On la crée dans la base, et cela marche.

Voila, j'ajouterai peut-être d'autres conseils si j'ai l'occasion de corriger des problèmes dans d'autre domaines.