[GO] Bis Sie das Fehlerprotokoll lesen können

Hintergrund

Neulich auf Twitter: "Sie sind verzweifelt nicht zum Programmieren geeignet, geben Sie also auf und machen Sie Löwenzahn auf Sashimi Ein Artikel mit dem Titel "kotofurumiya / n / n31d401fce782)" kam auf den Markt, aber ich empfehle ihn, weil er sehr interessant war. Es gab einen Inhalt darin, dass es zu viele College-Studenten gab, die das Fehlerprotokoll nicht lesen konnten, und es gab viele Abschnitte, an die ich denken konnte. Daher werde ich mich vorerst auf das Spigot-Plugin konzentrieren und erklären, wie man das Fehlerprotokoll liest. Ich schreibe plötzlich.

Schauen wir uns das Fehlerprotokoll an

Zunächst einmal werde ich nicht ohne Fehlerprotokoll sprechen. Zur Erklärung habe ich absichtlich ein Plugin erstellt, das [NullPointerException] auslöst (https://docs.oracle.com/javase/jp/8/docs/api/java/lang/NullPointerException.html).

QiitaPlugin.java


package com.github.siloneco.qiita;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class QiitaPlugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        Bukkit.getLogger().info(getName() + " enabled.");
    }

    @Override
    public void onDisable() {
        Bukkit.getLogger().info(getName() + " disabled.");
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        Player p = null;
        p.sendMessage("test");
    }
}

Wenn sich jemand dem Server anschließt, sendet er mit diesem Code eine null sendMessage und es tritt ein Fehler auf. Und das Fehlerprotokoll, als dies tatsächlich teilnahm

latest.log


[14:23:24 ERROR]: Could not pass event PlayerJoinEvent to QiitaPlugin v1.0.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.PlayerList.onPlayerJoin(PlayerList.java:346) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.PlayerList.a(PlayerList.java:166) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.LoginListener.b(LoginListener.java:159) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.LoginListener.e(LoginListener.java:57) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.NetworkManager.a(NetworkManager.java:233) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:140) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_231]
Caused by: java.lang.NullPointerException
        at com.github.siloneco.qiita.QiitaPlugin.onJoin(QiitaPlugin.java:26) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_231]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_231]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_231]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
        ... 14 more

Ein Fehlerprotokoll wurde erfolgreich generiert.

So lesen Sie das Fehlerprotokoll

Lesen wir dieses Protokoll sofort. Hier habe ich versucht, es zum leichteren Verständnis zu färben. image.png ** Der einzige Teil, den Sie wirklich sehen müssen, ist der dunkle Teil **. Obwohl es sich um ein so langes Fehlerprotokoll handelt, gibt es so wenige Stellen zum Lesen. Viele Leute wissen das nicht, deshalb kann ich das Fehlerprotokoll nicht lesen. Das Verfahren ist sehr einfach, aber zuerst müssen Sie sich den Paketnamen des Plugins merken, das Sie erstellen. Hier ist es "com.github.siloneco.qiita".

1. Suchen Sie die Zeile, die Ihren Paketnamen enthält

Im obigen Bild ist es der hellblaue Teil. Enthält den Paketnamen des Plugins, das Sie gerade erstellen. Die Zeile, die mit at beginnt, beschreibt den Ort des Fehlers. Sie müssen sich also nur den Paketnamen ansehen, der von Ihrem Plugin verwendet wird. Grundsätzlich ist es oft direkt nach Caused by.

2. Sehen Sie sich die Klammern rechts von dieser Zeile an

Im obigen Bild ist es der grüne (QiitaPlugin.java:26) Teil. Dies zeigt den Ort des Fehlers in Form von (Dateiname: Anzahl der Zeilen). In diesem Beispiel bedeutet dies, dass in Zeile 26 der Datei "QiitaPlugin.java" ein Fehler aufgetreten ist.

3. Sehen Sie den Grund für den Fehler

Achten Sie auf den verbleibenden grünen Teil. Die grüne Farbe oben ( Event PlayerJoinEvent konnte nicht an QiitaPlugin v1.0.0 übergeben werden) ist hier irrelevant, aber ich habe sie vorerst grün gemacht, da der Grund für den Fehler manchmal hier geschrieben ist. Dieses Mal gibt es einen Bericht, dass "QiitaPlugin Version 1.0.0 PlayerJoinEvent nicht normal verarbeitet werden konnte". ** Wenn Sie kein Englisch lesen können, verwenden Sie bitte Google Translation. Es wird in verständlichem Japanisch zurückgegeben. ** ** ** Schauen Sie sich die folgende grüne Farbe an ( Verursacht durch: java.lang.NullPointerException). Dies ist offensichtlich, wenn Sie es bereits gelesen haben. Verursacht durch ~ bedeutet verursacht durch ~, daher kann es in diesem Fall als verursacht durch java.lang.NullPointerException `` verstanden werden. Mit anderen Worten, der aufgetretene Fehler ist eine java.lang.NullPointerException.

4. Lassen Sie uns organisieren

Wenn Sie es nicht in Ihrem Kopf organisieren können, können Sie es auf Papier oder in einen Notizblock schreiben. Lassen Sie uns die Informationen in 1-3 organisieren.

QiitaPlugin.In Zeile 26 von Java ist ein Fehler aufgetreten.
Der aufgetretene Fehler ist Java.lang.NullPointerException.

5. Finden Sie heraus, was der Fehler ist

Wird nicht benötigt, wenn Sie es bereits wissen. Bitte fliegen Sie bis 6. Der diesmal aufgetretene Fehler ist java.lang.NullPointerException. Lassen Sie uns dies in Google graben und herausfinden. Vielleicht gibt es viele Fälle. Wenn es nicht angezeigt wird, fügen Sie dem Suchwort "Lösung" usw. hinzu, und es wird im Grunde angezeigt. Wenn das nicht funktioniert, fügen Sie "Fix" usw. hinzu und lesen Sie Artikel aus Übersee. Beim Lesen verschiedener Artikel scheint NullPointerException ein Fehler ** zu sein, der auftritt, wenn Sie ** null mit einem damit verbundenen Punkt (.) Ausführen **.

6. Schauen wir uns auf der Grundlage des oben Gesagten den problematischen Teil an

Werfen wir einen Blick auf den betreffenden Code

QiitaPlugin.java-24. Zeile


p.sendMessage("test");

Nun, in dieser Zeile ist das einzige, was die Punkte verbindet, "p". Es ist also sehr wahrscheinlich, dass p null ist. Lass uns nachsehen

QiitaPlugin.java-Zeile 23-27. Zeile


@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = null;
    p.sendMessage("test");
}

Immerhin wurde p null zugewiesen. Die Lösung besteht darin, es in "e.getPlayer ()" zu ändern.

Bonus: Ich habe einen weiteren Fehler erhalten, nachdem ich den Fehler behoben habe

Dies ist eine häufige Geschichte. Kehren wir zu 1 zurück und beheben Sie den neuen Fehler.

Kann immer noch nicht lösen!

Wenn es einen Fehler gibt, der nicht mit allen Mitteln behoben werden kann, ist es schneller, eine Person zu fragen. Es gibt viele Möglichkeiten, dies zu tun, z. B. in der Community zuzuhören oder jemanden zu fragen, der besser ist als Sie. Was ich möchte, dass Sie zu dieser Zeit vorsichtig sind

  1. Geben Sie die Umgebung an
  2. Präsentieren Sie den Code
  3. Präsentieren Sie das Fehlerprotokoll
  4. Beschreiben Sie andere detaillierte Informationen, die relevant sein können

Bitte seien Sie vorsichtig mit diesen Dingen und stellen Sie Fragen. ** Komplexe Fehler, die nicht nur durch Betrachten des Fehlerprotokolls behoben werden können, hängen wahrscheinlich mit der Umgebung zusammen. ** Zum Beispiel, was ist die Java-Version, was ist die Serverversion, was tritt der Fehler auf, welche Art von Änderung wurde vorgenommen, wenn sie vor der Änderung normal funktionierte usw. Benötigt viele Informationen. ~~ Bitte hör auf, wenn es kaputt zu sein scheint, obwohl du nichts getan hast () ~~

Schließlich

Dies war Qiitas erster Beitrag, aber ich hoffe, dies hilft so vielen Plugin-Entwicklern wie möglich. Themen und Fragen zu Plugins werden in der Themenbox akzeptiert. Wenn Sie also Lust dazu haben, geben Sie sie bitte ein. Na dann.

Geschichte verändern

21.04. - Ich brauchte den Titel nicht

Recommended Posts

Bis Sie das Fehlerprotokoll lesen können
Bis Sie die Google Speech API verwenden können
Das Ablesen des analogen Messgeräts kann am Beispiel MNIST erfolgen.
Das Ablesen des analogen Messgeräts kann am Beispiel MNIST erfolgen.
Können Sie diese Datei löschen?
Versuchen Sie, iptables zu lernen, bis Sie im Internet surfen können
Bis Sie opencv mit Python verwenden können
Bis Sie Caffe installieren und das Beispiel ausführen
Bis Sie die Kaggle-API mit Colab verwenden
Bis das Changefinder-Sample auf Python läuft
Bis Sie Blender installieren und vorerst mit Python ausführen können
Bis Sie Gauge installieren und das offizielle Beispiel ausführen
Lesen des CBC-Löserprotokolls (Pulp, Python-Mip)
Bis Sie mit Jupyter eine einfache Bilderkennung durchführen können
Lesen Sie die OpenCV-Dokumentation
Bis Sie MySQL-Python installieren
Lesen Sie das Tag, das Ihnen in ec2 mit boto3 zugewiesen wurde
Bis Sie Ihre eigene Python-Bibliothek mit pip installieren können
Sie, die das Protokoll ausmalen, um es besser sehen zu können
Was können Sie mit den Standardstatistiken der Python-Bibliothek tun?
Analysieren Sie die Antwort, damit Sie Wantedlys eigene Geschichte abkratzen können