SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [vi] [zh] Espace de traduction

Télécharger

Les aides au débuggage de squelettes

Novembre 2009 — mis à jour le : 2 septembre

Toutes les versions de cet article :

SPIP propose nativement quelques fonctionnalités pour venir en aide au webmestre lors de la phase de débuggage (ou débogage) des squelettes.
Ces fonctions d’information sont accessibles en passant des variables spécifiques dans l’url de la page appelée.


Les « var_mode » et « var_profile » s’utilisent en ajoutant soit ?var_mode=... (ex : -titre-de-rubrique-?var_mode=...), soit &var_mode=... (ex : spip.php?article3&var_mode=...) à l’url de la page appelée.
Leur utilisation n’est fonctionnelle que pour les administrateurs loggés.

var_mode=calcul   et   var_mode=recalcul

L’appel de « var_mode=calcul » regénère le code html (lance l’exécution du code déjà compilé) et rafraichit le cache (crée les fichiers html qui n’auront plus qu’à être lus lors des prochains appels de la page).

L’appel de « var_mode=recalcul » regénère le code php (effectue une nouvelle compilation du squelette), puis regénère le code html (lance l’exécution du code qui vient d’être compilé) enfin rafraichit le cache (crée les fichiers html qui n’auront plus qu’à être lus lors des prochains appels de la page).
le recalcul de la page regénère aussi les css et scripts javascript compressés.
le recalcul ne s’applique pas aux images (vignettes, images-typo, ...)

Ces deux appels peuvent être lancés par un clic sur l’un des boutons d’administration ;

var_mode=calcul

un premier clic appelant « var_mode=calcul » (lorsque l’intitulé du bouton est accompagné d’une étoile, c’est que la page affichée est lue depuis le cache) ;

var_mode=recalcul

un second clic appelant « var_mode=recalcul ».

Attention : On pourrait être tenté d’utiliser &var_mode=recalcul dans des liens de ses squelettes (pour forcer la mise à jour de css ou javascript par exemple). C’est une trés mauvaise pratique à éviter car consommatrice de ressources serveur (re-compilation du squelette).

var_mode=inclure

L’appel de « var_mode=inclure » affiche le nom et le chemin de chaque noisette (inclure ou modèle) qui compose la page.

Ceci permet de vérifier que les inclure réellement appelés par le squelette de la page sont bien ceux que l’on y a spécifiés.

var_mode=inclure

var_profile=1

L’appel de « var_profile=1 » affiche le détail des requêtes sql et les temps de calcul de chacune. Les requêtes sont classées de la plus gourmande en temps d’exécution à la plus rapide.

Cette fonction est particulièrement utile pour comprendre ce qui peut rendre une page excessivement lente à s’afficher.
Elle permet de visualiser les requêtes sql générées par chaque boucle du squelette (y compris les squelettes inclus) ainsi que les requêtes hors boucle (notées « Hors Compilation ») générées par SPIP.

var_profile

On peut y relever :

  • pour chaque boucle
    • le nombre de fois où la boucle (donc la requête sql) a été exécutée,
    • le temps (en secondes) pris par la boucle (c’est à dire le temps de la requête correspondante multiplié par le nombre d’exécutions de la boucle),
    • la liste (triée par ordre chronologique de toutes les requêtes générées par la page) de chaque exécution de la requête (qui sert de lien vers le détail de chaque requête).
  • les requêtes hors boucle
  • le temps total pris par l’ensemble des requêtes pour la page
  • le détail de chaque requête effectuée avec
    • un tableau statistique affichant l’explication de la requête,
    • l’intitulé de la requête.
Attention : Penser à calculer la page (&var_profile=1&var_mode=calcul) pour éviter que ce ne soit le cache qui soit lu, faussant ainsi le résultat affiché.

var_mode=preview

L’appel de « var_mode=preview » depuis l’espace privé permet de visualiser dans l’espace public un article de statut « proposé à la publication » sans avoir besoin de le publier.

var_mode=preview

var_mode=urls

L’appel de « var_mode=urls » force la mise à jour de toutes les urls de la page.

var_mode=debug

L’appel de « var_mode=debug » détaille la génération d’une page (boucles spip - requêtes sql - code php - statistiques des requêtes sql).

JPEG - 139.5 ko
var_mode=debug

Cette page affiche pour le squelette principal ainsi que pour chacun des squelettes inclus

  • la liste des valeurs des variables de contexte (#ENV) passées par le squelette appelant,
  • la liste des boucles.

Les différents liens permettent d’accèder à :

  • Squelette le code texte du squelette (évite ainsi d’avoir accès au fichier .html pour en lire le contenu),
    • résultat le code généré par ce squelette spécifiquement (hors inclusions éventuelles) qui, une fois évalué, retournera du html au navigateur,
    • code le code php généré par le compilateur (analyse plutôt destinée aux développeurs avertis) qui, une fois exécuté, produira le résultat (voir ci-dessus),
    • calcul le détail des requêtes sql et, pour chacune, les temps de calcul (voir ci-dessus var_profile).
  • boucle le code texte de la boucle complète (de <B_abc> à <//B_abc>),
    • résultat la requête sql générée par la boucle étudiée, une liste des premiers résultats retournés par cette requête [1],
    • code le code php (généré par le compilateur) de la fonction spécifique associée à cette boucle (analyse plutôt destinée aux développeurs avertis),
    • calcul le détail et les temps de calcul de la requête sql associée à cette boucle (voir ci-dessus var_profile).

var_mode=traduction

Le paramètre var_mode=traduction permet d’analyser les chaînes de langue utilisées dans une page. Lors de son utilisation, les chaînes de langue présentes dans la page sont mise en évidence :

  • les chaînes de langue traduites sont surlignées, une bulle d’info donnant l’item source et la langue de traduction est affichée lors du survol de la chaîne
  • les chaînes de langue inexistantes clignotent en rouge.

var_mode=traduction

Débloquer SVP

Il y a 2 var_mode exploitables dans SVP (sur la page d’admin des
plugins), l’un

-  var_mode=vider_paquets_locaux indique à SVP de forcer un recalcul de
ses informations en base pour ce qui concerne les plugins locaux donc
(plugins/ , plugins-dist/).

-  var_mode=reinstaller_svp est encore plus bourrin : il désinstalle SVP
(il se réinstallera au prochain tour).

Donc, si c’est un problème de lecture par SVP, le premier devrait
corriger ça (ça arrivait dans des cas rares, mais normalement on devrait
plus en avoir besoin). Le second évidemment nécessite de reconfigurer
SVP par la suite (dépots de plugins & conf si elle avait été changé…)

Afficher le contenu d’une table

Un appel de l’url ?exec=vertebres&table=nom_de_la_table affichera sous forme de tableau le contenu de la table nommée.
par exemple : ?exec=vertebres&table=articles pour la table spip_articles.

La première ligne de ce tableau liste les champs de la table dans l’ordre alphabétique (attention : ne pas confondre «  » et « id_... ») ; un clic sur l’un de ces champs ordonnant les résultats (ascendant/descendant).

La deuxième ligne permet d’effectuer une recherche sur une valeur spécifique d’un champ.

L’ensemble des données est affiché en mode paginé, par groupe de 10 résultats.

À noter : Cette fonction permettant d’afficher l’intégralité des données de toutes les tables de la base de données n’est utilisable que par un webmestre.
À noter : Cette fonction était disponible pendant un moment dans SPIP sous le joli nom de vertebrer.
À noter : En SPIP 2, ces informations sont disponibles dans l’espace public en appelant en url ?page=table:nom_de_la_table.

Obtenir encore plus d’informations pour le debuggage

— En ajoutant dans config/mes_options.php :

- Désactiver le cache de SPIP

<?php
define('_NO_CACHE', -1);
?>

ou en cliquant sur le bouton nativement présent depuis SPIP 3 : "Désactiver temporairement le cache"

- Désactiver les caches CSS et Javascript (fichiers se trouvant dans local/cache-js/ et local/cache-css/

<?php
define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
?>

-  Activer les rapports d’erreurs PHP

<?php
error_reporting(E_ALL^E_NOTICE);
ini_set ("display_errors", "On");
?>

-  Afficher toutes les erreurs dans SPIP

<?php
define('SPIP_ERREUR_REPORT',E_ALL);
?>

-  Augmenter la taille des logs

<?php
$GLOBALS['taille_des_logs'] = 5000;
?>

-  Ajouter dans les logs le fichier, la ligne et le nom de la fonction d’où le log est généré.

<?php
define('_LOG_FILELINE',true);
?>

-  Avoir tous les logs (SPIP3)

<?php
define('_LOG_FILTRE_GRAVITE',8);
?>

-  Ajoute les logs sur tout ce qui touche aux autorisations ( fonction autoriser_dist )

<?php
define('_DEBUG_AUTORISER', true);
?>

-  Depuis Spip 2.1.22 et 3.0.9, cette option permet d’indiquer dans les logs de MySQL (log/mysql-slow.log) l’URL correspondant aux requêtes « lentes » :

<?php
define('_DEBUG_SLOW_QUERIES', true);
?>

-  Depuis Spip 3.0.9 (et, en SPIP 2.1 avec le plugin « itérateurs »), cette option permet de suivre les boucles demandant plus de 5 secondes (5000 ms) pour s’exécuter

<?php
define('_BOUCLE_PROFILER', 5000);
?>

P.-S.

Voir aussi :

Notes

[1il est possible de modifier le nombre de résultats affichés ici en plaçant dans le fichier mes_options.php du répertoire config/ la ligne : define('_MAX_DEBUG_AFF', 'n');
(par défaut, pour éviter l’affichage de centaines de retours sur des boucles trop génériques, la valeur « n » de cette constante est fixée à 50).


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé