Il faut d'abord comprendre qu'un programme plante parce qu'il a été programmé pour planter ; imaginons une recette de cuisine qui te demande -10 grammes de beurre, tu ne peux rien faire d'autre que d'arrêter d'exécuter la recette.
De la même façon, un programme peut diviser deux nombres, mais si tu demandes 1 ÷ 0 il sera un peu embêté et crashera.
En revanche c'est possible dans certains calculs d'avoir des divisions par zéro acceptables (0 × 1/0 = 0), mais un ordinateur ne fera pas de tel raisonnement donc c'est au développeur de dire « si on multiplie par zéro, pas besoin de calculer ce qui suit » afin d'éviter un crash.
Donc pour résumé, un programme qui crash aura toujours une raison écrite, et les gentils développeurs ajouteront même plus de détail ; « Division par zéro en tentant de mettre à jour le bloc aux coordonnées (
x,
y,
z) ».
Tous les languages de programmation modernes permettent de regrouper des instructions sous forme de fonction. Le système d'exploitation appelle la fonction principale
main
qui peut à son tour appeler d'autres fonctions qui elles-mêmes peuvent appeler d'autres fonctions, c'est ce qu'on appelle la pile d'appel (stack trace) et celle-ci s'affiche généralement de la plus récente à la plus vieille ;
Code:
ArithmeticException: / 0
Stack trace:
at updateBlock()
at updateWorld()
at main()
En Java les erreurs s'appellent des exceptions, et même si le message est un peu légé « / 0 », la pile d'appel te permet de comprendre que le jeu était en train de mettre à jour (= calculer la logique à effectuer) un bloc.
À noter que la mémoire n'est pas recopiée par défaut, donc impossible de connaître les coordonnées du bloc en question sans plus d'info (ce que rajoute Minecraft).
Maintenant, pour ranger un peu le tout les fonctions en Java appartiennent toutes à une classe qui appartiennent elles-mêmes à un dossier ;
Code:
at com.google.common.cache.LocalCache.get()
at mezz.jei.common.render.ItemStackRenderer.render()
Le début est généralement sous forme de
com.groupe.projet
ou
com.projet
, la suite représente des paquets de rangement, ensuite arrive la classe puis finalement la fonction (respectivement l'avant-dernier et le dernier mot).
Auteur | Nom du projet | Dossier | Nom de la classe | Nom de la fonction |
Google | Common | cache | LocalCache | get |
Mezz | JEI | common/render | ItemStackRenderer | render |
C'est comme ça que tu peux trouver les mods fautifs, tu commences par le haut du stack trace, et tu trouves la première ligne qui contient un mod (tu peux généralement ignorer
com.google
et
net.minecraft
), et au besoin il suffit de chercher les trois premiers mots sur Google « com ldtteam domumornamentum » pour que tu tombes sur la page CurseForge du mod (c'est pas rare d'abréger le nom du projet, style tconstruct pour Tinker's Construct).
Une exception notable pour les Mixin de Sponge (
org.spongepowered.asm.mixin
) qui permettent aux mods de modifier le code source du jeu, généralement c'est des exceptions chaînées et y'a pas vraiment besoin du stack trace (vu que c'est la modification que le mod demande qui échoue, le mod sera pas présent dans le stack trace vu que c'est les Mixin qui font le travail de modifier le code du jeu) ;
Code:
RuntimeException: InvocationTargetException
Caused by: MixinTransformerError: An unexpected critical error was encountered
Caused by: InjectionError: Critical injection failure: Redirector redirectGetFancyWeather()Z in rubidium.mixins.json:features.options.MixinWorldRenderer failed injection check, (0/1) succeeded. Scanned 1 target(s). Using refmap rubidium-refmap.json
Cf. mon 2e message, Mixin crash en tentant d'appliquer une modification de Rubidium.
Et après oui ton crash parlait d'un bloc, mais au vu de son nom ça ressemblait à un bloc basique (style bloc de terre) sans aucune logique particulière donc pour moi le jeu recrashera si t'en reposes un, c'était pas une vraie solution de l'enlever, surtout si le bloc apparaît naturellement.
Après tu peux toujours reprendre tes crashs et me dire ce que tu en comprends, cependant je suis en vacances et n'ai prit que mon téléphone donc c'est pas très pratique pour écrire des pavés ou lire des logs, mais si ça ne te presse pas et que tu n'as rien compris je pourrais refaire ça plus proprement en rentrant.