Latest web development tutorials

Lua débogage (Debug)

Lua fournit la bibliothèque de débogage pour fournir nous créons une fonction de conversion personnalisé. Lua lui-même ne dispose pas d'un gouverneur intégré, mais de nombreux développeurs partagent leur code Lua gouverneur.

Lua dans la bibliothèque de débogage comprend les fonctions suivantes:

sethook ([thread,] crochet, masque [, count]):
Non. Méthode & Objet
1. debug ():

Entrez un mode interactif de l'utilisateur, l'exécution de chaque chaîne saisie par l'utilisateur. Utilisation des commandes simples et d'autres paramètres de débogage, l'utilisateur peut passer en revue les variables globales et locales, changer les valeurs des variables pour calculer un certain nombre d'expressions, et ainsi de suite.
ligne d'entrée de chaîne contenant seulement cont mettra fin à cette fonction, de sorte que l'appelant peut continuer à fonctionner vers le bas.

2. getfenv (objet):

Retourne un objet variable d'environnement.

3. gethook (filetage en option):

Les rendements représentent trois ensembles fil de crochet: la fonction en cours de crochet, le masque de crochet en cours, et le nombre de crochets en cours

4. getinfo ([thread,] f [ , ce]):

Informations sur la fonction retourne une table. Vous pouvez fournir cette fonction, vous pouvez également utiliser une représentation numérique de la fonction f. fonction numérique f représente en cours d'exécution sur appel la pile du thread spécifié correspondant à des niveaux: niveau 0 indique la fonction actuelle (getinfo lui-même); 1 couche indique que la fonction appel getinfo (sauf si elle est la fin de l'appel, cette situation ne sont pas inclus dans la pile); etc. . Si f est une fonction du nombre d'activités que le plus grand nombre, GetInfo retourne nil.

5. debug.getlocal ([thread,] f, local):

Cette fonction retourne le nom et la valeur de l'indice de l'empilement de couches fonction f pour les variables locales locales. Cette fonction est utilisée uniquement pour accéder aux variables locales explicitement définies, y compris les paramètres, les variables temporaires.

6. getmetatable (valeur):

Les points d'index donnés aux valeurs des éléments de table sur la pile. Si l'indice est invalide, ou la valeur du yuan a pas de table, la fonction retourne 0 et ne pousse pas quoi que ce soit à la pile.

7. getregistry ():

Retour table de registre, qui est hors d'une table prédéfinie peut être utilisé pour enregistrer tout code C que vous souhaitez enregistrer la valeur Lua.

8. getupvalue (f, jusqu'à)

Cette fonction retourne les noms et les valeurs de la fonction f le premier sur les valeurs. Si elle ne le fait pas sur cette valeur, elle retourne à zéro.
Dans '(' (parenthèses ouvertes) représentent le nom de la variable commençant sans nom de variable (sauf pour déboguer les informations de bloc de code).

10. Il fonctionnera comme un crochet mis en. masque à cordes et le comptage numérique détermine le crochet sera appelée quand. Le masque est une combinaison des caractères suivants dans une chaîne, chaque personnage a sa propre signification:

  • ' c ': Chaque fois que Lua appelle une fonction, appelez le crochet;
  • ' r ': chaque fois que Lua revient d'une fonction est appelée lorsque le crochet;
  • ' l ': chaque fois que Lua entre dans une nouvelle ligne, appelez le crochet.
11. setlocal ([thread,] niveau, local, valeur):

Cette fonction sera la première valeur locale affectée à la fonction de la couche de niveau variable locale première pile. Si vous ne disposez pas de cette variable, la fonction retourne nil. Si le niveau transfrontalier, une erreur.

12. SetMetaTable (valeur, table):

La valeur de la table de l'élément de jeu (peut être nul). Valeur de retour.

13. setupvalue (f, haut, valeur) :

Cette fonction sera d'abord mis en place une valeur sur la valeur de la fonction f. Si vous ne disposez pas de cette fonction sur une valeur, il renvoie nil sinon, elle renvoie le nom des valeurs précédentes.

14. retraçage ([thread,] [message [, niveau]]):

Si vous avez un message, et non une chaîne ou nul, la fonction sans aucun traitement directement de nouveau message. Dans le cas contraire, il renvoie les informations pile de retraçage de pile d'appel. Facultatif chaîne de message est ajouté au début de l'information pile de retraçage. Options numériques de niveau spécifié à partir de laquelle l'empilement de couches a commencé backtracking (valeur par défaut est 1, qui appelle où retraçage de).

Le tableau est notre fonction de débogage commun, alors nous pouvons regarder quelques exemples simples:

function myfunction ()
print(debug.traceback("Stack trace"))
print(debug.getinfo(1))
print("Stack trace end")
	return 10
end
myfunction ()
print(debug.getinfo(1))

Exécuter les résultats de sortie de code ci-dessus:

Stack trace
stack traceback:
	test2.lua:2: in function 'myfunction'
	test2.lua:8: in main chunk
	[C]: ?
table: 0054C6C8
Stack trace end

Dans l'exemple, nous utilisons le retraçage et GetInfo fonctions de la bibliothèque de débogage, getinfo fonction retourne une information de fonction de table.

un autre exemple

Nous avons souvent besoin de déboguer des variables locales dans une fonction. Nous pouvons utiliser la fonction getupvalue pour définir ces variables locales. Des exemples sont les suivants:

function newCounter ()
  local n = 0
  local k = 0
  return function ()
    k = n
    n = n + 1
    return n
    end
end

counter = newCounter ()
print(counter())
print(counter())

local i = 1

repeat
  name, val = debug.getupvalue(counter, i)
  if name then
    print ("index", i, name, "=", val)
	if(name == "n") then
		debug.setupvalue (counter,2,10)
	end
    i = i + 1
  end -- if
until not name

print(counter())

Exécuter les résultats de sortie de code ci-dessus:

1
2
index	1	k	=	1
index	2	n	=	2
11

Dans l'exemple ci-dessus, le compteur est incrémenté à chaque fois qu'un appel 1. Des exemples, nous avons utilisé la fonction getupvalue pour afficher l'état actuel des variables locales. Nous pouvons définir une variable locale à une nouvelle valeur. Exemple, avant de n est 2, utilisez la fonction setupvalue fixé à 10. Maintenant, nous appelons la fonction après l'exécution de la sortie est de 11 au lieu de 3.


Type de Debugging

  • Commande en ligne débogueur
  • débogueur graphique

Commande en ligne débogueur a: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Débogueur, Rldb, ModDebug.

Interface graphique débogueur a: SciTE, Decoda, ZeroBrane studio, akdebugger, LuaEdit.