Bonjour et bienvenue dans ce guide qui va vous apprendre à déterminer comment votre serveur à crash.
Avant toute chose, il faut savoir qu’en regardant sur internet des exemples de stack trace pour mon tutoriel, je suis tombé sur ce guide. Vu qu’il était relativement bien fait, j’ai donc décidé de le traduire pour la communauté française, et j’y ai ajouté certaines petites choses pour le compléter.
C’est parti !
« C’est quoi un « stack trace » ? »
Les stack traces sont essentiellement des longs messages d’erreur qui s’affichent dans la console de la part d’un plugin (ou un programme) pour informer l’utilisateur ou le développeur de ce qui s’est mal passé. Le stack trace contient deux parties : l’erreur qui a été rencontrée et où dans le code elle à été commise. Cette information peut t’aider, toi l’administrateur du serveur, et surtout toi, le développeur, à déterminer ce qui s’est mal passé.
Les stack traces d’un plugin
Voici ici un exemple de stack trace d’un plugin :
Quand on regarde la portion du haut :
Pour cette erreur, on voit que l’erreur est à la ligne 28 de PointsAPI.java, dans une fonction appelée getPoints(). Dans ce cas, c’était car le système de points du plugin ne pouvait pas se connecter à la database. Cette fonction a été appelée par ScoreboardManager$1.run() (une classe anonyme (car elle n’a pas de nom spécifique à elle) dans la classe ScoreboardManager), ce qui aurait provoqué l’actualisation du scoreboard.
Comment savoir quelle a été l’erreur ? Là, je suis désolé mais il va falloir comprendre un tout petit peu l’anglais, c’est dans le nom de l’erreur. Le nom de l’erreur est à la première ligne, c’est « NullPointerException ». Dans un français correct, cela veut dire « L’emplacement de ton information n’existe pas, son nom ne renvoie vers rien. » Vous pouvez trouver un liste de la plupart des Exceptions (c’est comme ça que l’on appelle ces erreurs) ici.
La seconde partie de votre stack trace provient du programme qui fait tourner votre serveur (crafbukkit.jar, minecraftserver.jar, etc…)
Les stack traces provenant d’erreurs YAML
Les gens sont parfois confus faces à ces stack traces, ils pensent que l’erreur vient du plugin. C’est tout à fait faux. C’est un problème que vous avez causé qui peut être très facilement résolu. Voici un exemple d’un stack trace provenant du plugin PermissionsEx, causé par une syntaxe incorrecte quand vous avez voulu changé un préfixe (ex : vous avez voulu changer le [ADMIN] qui s’affichait dans le chat devant votre pseudo en [ADMINSUPERCOOL])
Le stack trace vous informe qu’il y a eu une erreur quand le plugin a voulu charger la configuration. Nous allons maintenant utiliser un outil, qui se situe ici (http://yaml-online-parser.appspot.com/) pour identifier l’erreur.
Voici la portion de la configuration suspecte :
Quand nous copions-collons cette portion suspecte dans le site, voici ce que nous obtenons :
EDIT : Pour ceux qui ne la verraient pas, l'mage est ici : https://proxy.spigotmc.org/40c7c0d99f9a8bfdca22814e10eda0503f955f96?url=http://puu.sh/aQAbs/37c5dec728.png
A partir de là vous allez être capable d’identifier l’erreur et de la corriger. Des fois l’erreur apparaitra sur une autre ligne ; dans ce cas, regardez autour.
Vous voici arrivés à la fin de ce tutoriel, vous êtes maintenant capables de lire des stack trace,d’impressionner votre mamie avec vos connaissances et de corriger vous-mêmes vos erreurs sans devoir aller faire un sujet dans la section support serveur de minecraft.fr et ainsi permettre à Detobel36 de se reposer un peu \(^_^)/
Si vous avez tout lu, merci, mon travail n’aura pas été vain ^^
EDIT : Même si vous avez pas TOUT lu, ça me fais plaisir ^^
EDIT 2 : J'ai changé le titre, pour le rendre plus attirant, et plus compréhensible ^^
N’hésitez pas à poster vos questions en commentaires (s’il y en a). Je suis aussi ouvert à toutes propositions de remodelage de mon tutoriel, si vous trouvez que c’est mal organisé >_<
Avant toute chose, il faut savoir qu’en regardant sur internet des exemples de stack trace pour mon tutoriel, je suis tombé sur ce guide. Vu qu’il était relativement bien fait, j’ai donc décidé de le traduire pour la communauté française, et j’y ai ajouté certaines petites choses pour le compléter.
C’est parti !
« C’est quoi un « stack trace » ? »
Les stack traces sont essentiellement des longs messages d’erreur qui s’affichent dans la console de la part d’un plugin (ou un programme) pour informer l’utilisateur ou le développeur de ce qui s’est mal passé. Le stack trace contient deux parties : l’erreur qui a été rencontrée et où dans le code elle à été commise. Cette information peut t’aider, toi l’administrateur du serveur, et surtout toi, le développeur, à déterminer ce qui s’est mal passé.
Les stack traces d’un plugin
Voici ici un exemple de stack trace d’un plugin :
Code:
[11:56:54] [Server thread/WARN]: java.lang.NullPointerException
[11:56:54] [Server thread/WARN]: at net.paradoxmc.NetworkManager.Points.PointsAPI.getPoints(PointsAPI.java:28)
[11:56:54] [Server thread/WARN]: at net.paradoxmc.NetworkManager.GizmoManager.ScoreboardManager$1.run(ScoreboardManager.java:40)
[11:56:54] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftTask.run(CraftTask.java:71)
[11:56:54] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:641)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628)
Code:
[11:56:54] [Server thread/WARN]: java.lang.NullPointerException
[11:56:54] [Server thread/WARN]: at net.paradoxmc.NetworkManager.Points.PointsAPI.getPoints(PointsAPI.java:28)
[11:56:54] [Server thread/WARN]: at net.paradoxmc.NetworkManager.GizmoManager.ScoreboardManager$1.run(ScoreboardManager.java:40)
Comment savoir quelle a été l’erreur ? Là, je suis désolé mais il va falloir comprendre un tout petit peu l’anglais, c’est dans le nom de l’erreur. Le nom de l’erreur est à la première ligne, c’est « NullPointerException ». Dans un français correct, cela veut dire « L’emplacement de ton information n’existe pas, son nom ne renvoie vers rien. » Vous pouvez trouver un liste de la plupart des Exceptions (c’est comme ça que l’on appelle ces erreurs) ici.
La seconde partie de votre stack trace provient du programme qui fait tourner votre serveur (crafbukkit.jar, minecraftserver.jar, etc…)
Code:
[11:56:54] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftTask.run(CraftTask.java:71)
[11:56:54] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:641)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490)
[11:56:54] [Server thread/WARN]: at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628)
Les stack traces provenant d’erreurs YAML
Les gens sont parfois confus faces à ces stack traces, ils pensent que l’erreur vient du plugin. C’est tout à fait faux. C’est un problème que vous avez causé qui peut être très facilement résolu. Voici un exemple d’un stack trace provenant du plugin PermissionsEx, causé par une syntaxe incorrecte quand vous avez voulu changé un préfixe (ex : vous avez voulu changer le [ADMIN] qui s’affichait dans le chat devant votre pseudo en [ADMINSUPERCOOL])
Code:
ru.tehkode.permissions.exceptions.PermissionBackendException: Error loading permissions file!
at ru.tehkode.permissions.backends.file.FileBackend.reload(FileBackend.java:331) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.backends.file.FileBackend.<init>(FileBackend.java:119) ~[PermissionsEx.jar:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_55]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[?:1.7.0_55]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.7.0_55]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[?:1.7.0_55]
at ru.tehkode.permissions.backends.PermissionBackend.getBackend(PermissionBackend.java:372) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.backends.PermissionBackend.getBackend(PermissionBackend.java:347) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.PermissionManager.createBackend(PermissionManager.java:713) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.PermissionManager.setBackend(PermissionManager.java:695) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.PermissionManager.initBackend(PermissionManager.java:772) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.PermissionManager.<init>(PermissionManager.java:74) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.bukkit.PermissionsEx.onEnable(PermissionsEx.java:158) [PermissionsEx.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) [spigot.jar:git-Spigot-1604]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:329) [spigot.jar:git-Spigot-1604]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-1604]
at org.bukkit.craftbukkit.v1_7_R4.CraftServer.loadPlugin(CraftServer.java:476) [spigot.jar:git-Spigot-1604]
at org.bukkit.craftbukkit.v1_7_R4.CraftServer.enablePlugins(CraftServer.java:394) [spigot.jar:git-Spigot-1604]
at org.bukkit.craftbukkit.v1_7_R4.CraftServer.reload(CraftServer.java:866) [spigot.jar:git-Spigot-1604]
at org.bukkit.Bukkit.reload(Bukkit.java:301) [spigot.jar:git-Spigot-1604]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [spigot.jar:git-Spigot-1604]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181) [spigot.jar:git-Spigot-1604]
at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:767) [spigot.jar:git-Spigot-1604]
at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(CraftServer.java:753) [spigot.jar:git-Spigot-1604]
at net.minecraft.server.v1_7_R4.DedicatedServer.aB(DedicatedServer.java:326) [spigot.jar:git-Spigot-1604]
at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:290) [spigot.jar:git-Spigot-1604]
at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [spigot.jar:git-Spigot-1604]
at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [spigot.jar:git-Spigot-1604]
at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [spigot.jar:git-Spigot-1604]
Caused by: org.bukkit.configuration.InvalidConfigurationException: while parsing a block mapping
in 'string', line 10, column 7:
suffix: '&f'
^
expected <block end>, but found Scalar
in 'string', line 12, column 17:
default: 'false'
^
at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:57) ~[spigot.jar:git-Spigot-1604]
at ru.tehkode.permissions.backends.file.FileConfig.loadFromString(FileConfig.java:62) ~[PermissionsEx.jar:?]
at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:226) ~[spigot.jar:git-Spigot-1604]
at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:169) ~[spigot.jar:git-Spigot-1604]
at ru.tehkode.permissions.backends.file.FileConfig.load(FileConfig.java:32) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.backends.file.FileBackend.reload(FileBackend.java:319) ~[PermissionsEx.jar:?]
... 28 more
Caused by: org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping; expected <block end>, but found Scalar; in 'string', line 12, column 17:
default: 'false'
^
at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:570) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:230) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:159) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:159) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:159) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:159) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:122) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:105) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:120) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481) ~[spigot.jar:git-Spigot-1604]
at org.yaml.snakeyaml.Yaml.load(Yaml.java:400) ~[spigot.jar:git-Spigot-1604]
at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55) ~[spigot.jar:git-Spigot-1604]
at ru.tehkode.permissions.backends.file.FileConfig.loadFromString(FileConfig.java:62) ~[PermissionsEx.jar:?]
at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:226) ~[spigot.jar:git-Spigot-1604]
at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:169) ~[spigot.jar:git-Spigot-1604]
at ru.tehkode.permissions.backends.file.FileConfig.load(FileConfig.java:32) ~[PermissionsEx.jar:?]
at ru.tehkode.permissions.backends.file.FileBackend.reload(FileBackend.java:319) ~[PermissionsEx.jar:?]
... 28 more
Voici la portion de la configuration suspecte :
Code:
Helper:
build: false
inheritance:
- Member
- Donor
permissions:
- networkmanager.nohide
options:
suffix: '&f'
prefix: '&8[&9HELPER&8]
default: 'false'
EDIT : Pour ceux qui ne la verraient pas, l'mage est ici : https://proxy.spigotmc.org/40c7c0d99f9a8bfdca22814e10eda0503f955f96?url=http://puu.sh/aQAbs/37c5dec728.png
A partir de là vous allez être capable d’identifier l’erreur et de la corriger. Des fois l’erreur apparaitra sur une autre ligne ; dans ce cas, regardez autour.
Vous voici arrivés à la fin de ce tutoriel, vous êtes maintenant capables de lire des stack trace,
Si vous avez tout lu, merci, mon travail n’aura pas été vain ^^
EDIT : Même si vous avez pas TOUT lu, ça me fais plaisir ^^
EDIT 2 : J'ai changé le titre, pour le rendre plus attirant, et plus compréhensible ^^
N’hésitez pas à poster vos questions en commentaires (s’il y en a). Je suis aussi ouvert à toutes propositions de remodelage de mon tutoriel, si vous trouvez que c’est mal organisé >_<
Dernière édition: