GM Market — Premium GMod & FiveM Scripts
Garry's Mod Guide 🇫🇷 Français

Comment lire et débugger les erreurs Lua sur un serveur DarkRP — guide complet

>*Muzan Moderator
@>*Muzan · Moderator ·
9 views 0 replies

TL;DR

Tu vois une erreur rouge dans ta console, tu ne comprends rien, et ton serveur DarkRP part en vrille ? Ce guide t'explique comment lire chaque partie du message d'erreur, ce que fait Simplerr, où trouver les erreurs côté client, et comment corriger les problèmes les plus courants — sans copier-coller bêtement sur des forums anglais.


1. Comprendre la structure d'une erreur Lua dans GMod

Quand une erreur Lua se déclenche, elle interrompt immédiatement l'exécution du script concerné. Si l'erreur touche un fichier critique comme init.lua, c'est tout le gamemode qui peut planter.

Un message d'erreur typique ressemble à ça :

[ERROR] addons/darkrpmodification/lua/darkrp_customthings/jobs.lua:503:
A table is being indexed by something that does not exist (table index is nil)

Voici comment le décomposer :

Partie du messageCe que ça signifie
[ERROR]Préfixe standard d'une erreur Lua GMod
addons/.../jobs.luaChemin du fichier fautif (cherche-le dans ton dossier garrysmod/)
:503Numéro de la ligne où l'erreur s'est produite — c'est là que tu dois ouvrir ton éditeur
A table is being indexed...Description de l'erreur en anglais, souvent reformulée par Simplerr

Astuce console : Dans la console de GMod, les erreurs serverside apparaissent en bleu, les erreurs clientside en jaune. Si tu vois du rouge ou du blanc, il s'agit d'erreurs moteur, pas d'erreurs Lua.


2. Simplerr : le système d'aide de DarkRP

DarkRP embarque une bibliothèque maison appelée Simplerr (gamemodes/darkrp/gamemode/libraries/simplerr.lua). Son rôle est de transformer les messages d'erreur Lua bruts en explications plus lisibles, avec des Hints (pistes) classées du plus probable au moins probable.

Un bloc Simplerr complet ressemble à ça :

[ERROR] A runtime error has occurred in "addons/darkrpmodification/lua/darkrp_customthings/jobs.lua" on line 21.
The best help I can give you is this: Corrupt team: Citoyen!
This job does not have a unique command.

Hints:
 - There must be some other job that has the same command.

The responsibility for this error lies with (the authors of) one (or more) of these files:
 1. addons/darkrpmodification/lua/darkrp_customthings/jobs.lua on line 21
 2. [C] on line -1
 3. gamemodes/darkrp/gamemode/libraries/simplerr.lua on line 412
 ...
------- End of Simplerr error -------

Ce qu'il faut retenir :

  • La ligne The best help I can give you is this: te donne la description humaine de l'erreur (quand la cause est connue).
  • Les Hints sont tes meilleures pistes — lis-les dans l'ordre, la première est généralement la bonne.
  • La liste de fichiers sous The responsibility for this error lies with... te montre la stack trace : le fichier numéro 1 est le plus directement responsable.
  • La mention on line -1 dans la stack trace n'est pas une erreur en soi — c'est simplement que Simplerr ne peut pas pointer vers une ligne précise dans certains contextes (notamment les fonctions C internes).
  • La ligne ------- End of Simplerr error ------- marque la fin du bloc Simplerr.

3. Les erreurs les plus courantes et leur solution

'}' expected (to close '{' at line X) near ')'

Il manque une accolade fermante } dans ta définition de job ou de groupe. Ouvre le fichier indiqué, va à la ligne mentionnée dans le message d'ouverture (pas la ligne de l'erreur), et vérifie que chaque { a bien son }.

-- Mauvais
TEAM_CITOYEN = DarkRP.createJob("Citoyen", {
    color = Color(20, 150, 20),
    model = {"models/player/kleiner.mdl"},
    -- accolade fermante manquante !

-- Correct
TEAM_CITOYEN = DarkRP.createJob("Citoyen", {
    color = Color(20, 150, 20),
    model = {"models/player/kleiner.mdl"},
})

'<eof>' expected near 'end'

Lua a atteint la fin du fichier alors qu'il attendait encore quelque chose (souvent un end, une accolade, ou une parenthèse). Cas typique : tu as un end en trop, ou il en manque un quelque part plus haut.

Corrupt team: X! This job does not have a unique command.

Deux jobs partagent la même valeur pour le champ command. Chaque job doit avoir une commande unique. Cherche les doublons dans ton fichier jobs.lua.

-- Problème : deux jobs avec command = "citizen"
command = "citizen",  -- job 1
command = "citizen",  -- job 2  ← à changer !

GAMEMODE.DefaultTeam is not set to an existing job

Le job défini comme job par défaut (souvent TEAM_CITIZEN) n'existe plus ou a été désactivé. Vérifie dans disabled_defaults.lua et settings.lua que GAMEMODE.DefaultTeam pointe vers un job qui existe réellement.

A table is being indexed by something that does not exist (table index is nil)

Tu essaies d'accéder à une propriété ou un élément d'une variable qui n'est pas définie (nil). Le numéro de ligne indiqué est ta cible — inspecte ce que tu indexe à cet endroit.


4. Retrouver les erreurs côté client : clientside_errors.txt

Les erreurs que rencontrent les joueurs connectés (côté client) ne s'affichent pas dans ta console serveur. Elles sont enregistrées dans le fichier :

/garrysmod/clientside_errors.txt

C'est le premier endroit à regarder quand un joueur te rapporte un bug visuel ou un menu cassé que tu ne reproduis pas côté serveur.


5. Couldn't include file 'X.lua' (File not found)

Ce message signifie que le script Lua a essayé d'inclure un autre fichier qui n'existe pas sur le serveur. Causes habituelles :

  • L'addon n'a pas été installé correctement (dossier mal nommé, upload incomplet via FTP).
  • Un addon dépendant n'est pas présent sur le serveur.
  • Le fichier a été ajouté pendant que le serveur était en ligne — un redémarrage complet est nécessaire pour qu'il soit chargé.

Solution : Vérifie le chemin exact indiqué dans le message, contrôle que le fichier est bien présent avec le bon nom (sensible à la casse sur Linux !), puis redémarre le serveur.


6. Lire la stack trace comme un pro

La stack trace, c'est la liste numérotée de fichiers et lignes qui apparaît sous l'erreur. Elle représente l'ordre d'appel des fonctions au moment du crash.

1. unknown - addons/monAddon/lua/sv_main.lua:42
2. unknown - gamemodes/darkrp/gamemode/libraries/modificationloader.lua:131
3. unknown - gamemodes/darkrp/gamemode/init.lua:81
  • Ligne 1 = l'endroit exact où l'erreur a eu lieu → c'est là que tu commences à investiguer.
  • Les lignes suivantes = le chemin d'appel remonté vers le point d'entrée du serveur.
  • Si tu vois des fichiers internes DarkRP (modificationloader.lua, init.lua) en lignes 2, 3, etc., c'est normal — ce sont eux qui chargent tes fichiers. Le problème reste dans la ligne 1.

7. Workflow de débogage rapide

  • Ouvrir la console serveur (rcon ou accès direct si hébergement local)
  • Repérer le bloc [ERROR] ou Simplerr
  • Noter le fichier et la ligne (ligne 1 de la stack)
  • Ouvrir ce fichier dans un éditeur avec numérotation de lignes (VS Code, Notepad++…)
  • Lire les Hints Simplerr dans l'ordre
  • Corriger, sauvegarder, redémarrer le serveur (changelevel <map> ou redémarrage complet)
  • Vérifier clientside_errors.txt si des joueurs rapportent un bug non reproductible serveur

8. Outils utiles

Si tu cherches des scripts ou addons DarkRP compatibles et bien maintenus, le marketplace GM Market peut être une bonne ressource pour éviter les addons bricolés qui génèrent des erreurs dès le départ.


FAQ

Q : Mon erreur affiche on line -1, c'est grave ? Non. La ligne -1 apparaît quand Simplerr ne peut pas localiser précisément la ligne dans un contexte C interne. Concentre-toi sur le fichier Lua indiqué juste au-dessus dans la stack trace.

Q : Il y a 20 erreurs qui s'affichent d'un coup, par où commencer ? Toujours par la première erreur chronologiquement. Les suivantes sont souvent des effets de bord causés par la première. Corrige-la, redémarre, et observe si les autres disparaissent.

Q : L'erreur pointe vers un fichier DarkRP que je n'ai pas modifié. C'est souvent un faux ami. La stack trace pointe vers le fichier où l'erreur s'est manifestée, pas forcément là où elle a été causée. Remonte la stack et regarde le fichier de ton addon ou de ta config (ligne 1 de la liste).

Q : Mon serveur tourne sur Linux, et l'addon charge bien en local mais pas en prod. Linux est sensible à la casse des noms de fichiers. MyScript.lua et myscript.lua sont deux fichiers différents. Vérifie que les appels include() et AddCSLuaFile() utilisent exactement le même nom de fichier que celui sur le disque.

0

0 Replies

No replies yet — be the first to respond.