Débogage
Tout développeur de mods passe plus de temps à traquer des bugs qu'à écrire du code neuf. Le secret, c'est qu'un bug n'arrive jamais par hasard : il laisse toujours une signature. Quand tu sais où regarder et comment interpréter ce que tu trouves, tu règles en deux minutes ce qui aurait pu te coûter une soirée entière de découragement.
Le fichier journal : ta boîte noire
Quand une exception survient dans un script SHVDN, le jeu n'affiche pas de fenêtre d'alerte. Il coupe immédiatement le script fautif et continue sa partie sans afficher d'erreur à l'écran. La seule trace du plantage se trouve dans ScriptHookVDotNet.log, situé dans le dossier d'installation de GTA V.
Ouvre ce fichier dès qu'un script ne réagit plus. Fais défiler jusqu'à la fin. Tu verras des lignes de ce type :
[14:32:01] [ERROR] Script 'MyFirstMod' terminated with an unhandled exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at MyFirstMod.OnTick(Object sender, EventArgs e) in C:\Projects\MyFirstMod\MyFirstMod.cs:line 28
Décoder la trace de la pile (stack trace)
Cette trace te livre trois informations capitales :
- Le type d'erreur :
System.NullReferenceException. Tu as tenté de lire une propriété ou d'appeler une méthode sur une variable qui vautnull. - La méthode :
MyFirstMod.OnTick. L'erreur a eu lieu dans ton gestionnaire d'image. - La ligne exacte :
line 28. Ouvre ton fichier dans Visual Studio, tape Ctrl+G, saisis 28, et regarde ce qui s'y trouve.
Dans neuf cas sur dix, une NullReferenceException à cet endroit signifie que tu as écrit Game.Player.Character.Position avant que le personnage du joueur n'ait fini d'apparaître dans le monde.
Les trois pièges classiques du débutant
- Accéder aux entités avant leur création : Pendant le chargement ou lors d'un switch de personnage,
Game.Player.Characterpeut valoir null pendant plusieurs images. Protège systématiquement ton code :if (Game.Player.Character == null || !Game.Player.Character.Exists()){return;} - Échec de compilation passé inaperçu : Tu as cliqué sur Générer, mais des erreurs rouges sont apparues dans la fenêtre de sortie. Tu penses avoir mis à jour ta DLL, mais le dossier contient toujours l'ancien binaire. Vérifie toujours le message
Génération : 1 a réussi. - Mauvaise version du .NET Framework : ScriptHookVDotNet 3 s'attend à du .NET Framework 4.8. Si ton projet cible .NET 6, .NET 8 ou .NET Standard, SHVDN refusera purement et simplement de le charger.
Utiliser ton tuteur IA pour le débogage
Face à une erreur incompréhensible, ne colle jamais tout ton fichier dans l'IA en demandant « fais que ça marche ». Cela n'apprend rien et injecte souvent trois bugs supplémentaires.
Pose plutôt des questions ciblées :
- Colle la stack trace exacte et les cinq lignes de code qui entourent la ligne en faute.
- Demande : « Qu'est-ce qui peut être null sur cette ligne, et comment m'en protéger avec une clause de garde ? »
- Analyse l'explication avant d'accepter la moindre retouche.
Maintenant que tu as assimilé la structure, les types, le contrôle de flux, les touches et le débogage, tu es prêt pour ton premier grand jalon pratique : le Projet 01 Hello GTA.