0Pricing
Lua Academy · Leçon

La bibliothèque debug

Examinez les traces de pile, les variables locales et les upvalues avec la bibliothèque debug.

La bibliothèque debug est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Qu’est-ce que la bibliothèque debug ?

La bibliothèque debug donne un accès de bas niveau aux mécanismes internes de Lua : cadres de pile, variables locales, valeurs ascendantes, hooks et état des coroutines. Utilisez-la pour le débogage, et non pour la logique de production.

debug.traceback

debug.traceback(msg, level) renvoie une chaîne contenant la pile des appels. Elle est généralement transmise à xpcall comme gestionnaire d’erreurs.

local ok, err = xpcall(function()
  error("something went wrong")
end, debug.traceback)
print(err)

debug.getinfo

debug.getinfo(fn, what) renvoie une table contenant des informations sur une fonction : nom, source, ligne de définition, etc.

local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)

Inspection d’un niveau de la pile

Transmettez un entier à debug.getinfo pour inspecter un cadre de pile précis. Le niveau 1 correspond à la fonction actuelle et le niveau 2 à l’appelant.

local function where()
  local info = debug.getinfo(2, "Sl")
  return info.short_src .. ":" .. info.currentline
end
print(where())

debug.getlocal et debug.setlocal

debug.getlocal(level, n) renvoie le nom et la valeur de la n-ième variable locale d’un cadre de pile.

local function example()
  local x = 42
  print(debug.getlocal(1, 1))  -- x  42
end
example()

debug.getupvalue et debug.setupvalue

Inspectez et modifiez les valeurs ascendantes d’une fonction. getupvalue(fn, n) renvoie le nom et la valeur.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10
debug.setupvalue(f, 1, 99)
print(f())  -- 99

debug.sethook

debug.sethook(fn, mask, count) définit un hook appelé lors des événements suivants : "c" (appel), "r" (retour), "l" (ligne), ou toutes les N instructions.

local calls = 0
debug.sethook(function() calls = calls + 1 end, "c")
-- ... run some code ...
debug.sethook()  -- remove hook
print("calls:", calls)

debug.getmetatable

debug.getmetatable(obj) récupère la métatable même lorsque getmetatable est bloqué par un champ __metatable.

debug.upvalueid et upvaluejoin

debug.upvalueid(fn, n) renvoie un identifiant unique pour une valeur ascendante. debug.upvaluejoin(f1,n1,f2,n2) leur fait partager la même cellule.

Attention : risques de la bibliothèque debug

La bibliothèque debug peut violer l’encapsulation et briser des invariants. N’utilisez jamais cette bibliothèque dans du code de production. Réservez-la aux tests, au profilage et aux outils de développement.

debug.traceback dans xpcall

L’utilisation la plus courante de debug sans risque en production consiste à transmettre debug.traceback comme gestionnaire d’erreurs à xpcall afin d’obtenir des messages d’erreur détaillés.

Question sur la bibliothèque debug

Quelle fonction de débogage peut être utilisée sans risque et est couramment employée dans la gestion des erreurs en production ?

Récapitulatif : bibliothèque debug

La bibliothèque debug expose les cadres de pile, les variables locales, les valeurs ascendantes et les hooks. Utilisez debug.traceback avec xpcall pour obtenir des erreurs détaillées ; considérez le reste comme des outils d’introspection réservés aux développeurs.

Questions Fréquemment Posées

La leçon « La bibliothèque debug » est-elle gratuite ?

Oui — le texte complet de « La bibliothèque debug » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « La bibliothèque debug » ?

Examinez les traces de pile, les variables locales et les upvalues avec la bibliothèque debug. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « La bibliothèque debug » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fonctions de la bibliothèque math
  2. Fonctions de la bibliothèque table
  3. Bibliothèques os et io
  4. La bibliothèque debug
← Retour à Lua Academy