Versuchen Sie es mit der IBM Java-Methodenverfolgung

Überblick

IBM Java wird standardmäßig mit einer praktischen Funktion namens Method Tracing (*) geliefert. Mithilfe der Methodenverfolgung können Sie die zur Laufzeit aufgerufenen Methoden in chronologischer Reihenfolge anzeigen. Die Verwendung ist sehr einfach. Geben Sie einfach die Methode an, die Sie in den Laufzeitoptionen des Java-Befehls verfolgen möchten (Sie können sie auch in der Eigenschaftendatei oder der Java-API angeben). Sie können auch Platzhalter verwenden, um die zu verfolgende Methode anzugeben.

Wie benutzt man

Lassen Sie es uns sofort verwenden. Lassen Sie uns die sample.HelloMT-Klasse mit allen Methoden aller Klassen des Beispielpakets als Trace-Ziel ausführen. Geben Sie die Laufzeitoptionen mit -Xtrace: ... wie folgt an:

java -Xtrace:methods={sample/*},print=mt sample.HelloMT

Das auszuführende Java-Programm (HelloMT.java) lautet wie folgt.

HelloMT.java


package sample;
public class HelloMT {
    private void say() {
        System.out.println("Hello Method Trace.");
        sayMore("Enjoy Method Trace!");
    }
    private void sayMore(String message) {
        System.out.println(message);
    }
    public static void main(String args[]) {
        HelloMT hello = new HelloMT();
        hello.say();
    }
}

Das Ausführungsergebnis ist wie folgt. Die Methodenablaufverfolgung wird standardmäßig als Standardfehler gedruckt.

Standardausgabe

Hello Method Trace.
Enjoy Method Trace!

Standart Fehler

12:15:33.618*0x2cb0500              mt.3        > sample/HelloMT.main([Ljava/lang/String;)V bytecode static method
12:15:33.618 0x2cb0500              mt.0        > sample/HelloMT.say()V bytecode method, this = 0xfff3b990
12:15:33.618 0x2cb0500              mt.0        > sample/HelloMT.sayMore(Ljava/lang/String;)V bytecode method, this = 0xfff3b990
12:15:33.618 0x2cb0500              mt.6        < sample/HelloMT.sayMore(Ljava/lang/String;)V bytecode method
12:15:33.618 0x2cb0500              mt.6        < sample/HelloMT.say()V bytecode method
12:15:33.618 0x2cb0500              mt.9        < sample/HelloMT.main([Ljava/lang/String;)V bytecode static method

-Xtrace: Beispiel für eine Optionsspezifikation

Weitere Informationen zu Optionen (-Xtrace: ...) finden Sie im IBM Java-Online-Handbuch unter dem Referenzlink. Hier finden Sie einige praktische Beispiele für Optionsspezifikationen.

** Beispiel 1) Geben Sie mehrere Bedingungen für die zu verfolgende Methode an ** -Xtrace:methods={sample/*,test/*},print=mt Sie können mehrere durch Kommas getrennte Bedingungen angeben.

** Beispiel 2) Angeben von Ablaufverfolgungsbedingungen mit begrenzten Klassen- / Methodennamen ** -Xtrace:methods={sample/HelloMT},print=mt -Xtrace:methods={sample/HelloMT.say},print=mt In der oberen Zeile werden alle Methoden der sample.HelloMT-Klasse verfolgt. In der unteren Zeile wird nur die say-Methode der sample.HelloMT-Klasse verfolgt.

** Beispiel 3) Trace mit Parameterinformationen ** -Xtrace:methods={com/ibm/sample/HelloMT.say*()},print=mt Sie können das Einschließen von Parameterinformationen verfolgen, indem Sie am Ende der Methodenspezifikation () hinzufügen. Wenn das Argument ein Grundelement ist, können Sie den Wert auch in der Ablaufverfolgung sehen. Wenn das Argument ein Objekt ist, wird die hexadezimale Adresse ausgegeben, sodass es nicht möglich ist, den Wert des Inhalts zu überprüfen. Wenn es jedoch null ist, wird auch "argumente: (null)" in der Ablaufverfolgung ausgegeben, sodass es ein Hinweis ist, um das Problem zu bestimmen. Wird sein.

** Beispiel 4) Angeben von Ausschlussbedingungen für Spuren ** -Xtrace:methods={sample/*,!sample/HelloMT.sayMore},print=mt Wenn zu Beginn ! Beschrieben wird, wird die Trace-Ausschlussbedingung angegeben. Wenn im obigen Beispiel die Ausschlussspezifikation zuerst beschrieben wird, ist sie ungültig und die sayMore-Methode wird auch in der Ablaufverfolgung ausgegeben. Achten Sie daher auf die Reihenfolge der Beschreibung.

** Beispiel 5) Trace in Datei ausgeben ** -Xtrace:none,methods={sample/HelloMT},maximal=mt,output=C:\MTrace\mtrace1.out Wenn Sie keine angeben, wird eine große Anzahl von Protokollen als Standardverfolgungspunkt ausgegeben. Seien Sie also vorsichtig! Die Ausgabedatei ist im Binärformat und muss als Referenz formatiert werden. Formatieren Sie mit der IBM Java TraceFormat-Klasse wie folgt: C:\MTrace>java com.ibm.jvm.format.TraceFormat mtrace1.out Weitere Informationen zur TraceFormat-Klasse finden Sie unter dem Referenzlink (** Ausführen des Trace-Formatierers **).

Start / Ende-Steuerung der Methodenverfolgung durch Java-API

Für den oben gezeigten Methoden-Trace (Beispiele 1 bis 5) ist der Methoden-Trace vom Anfang bis zum Ende der JVM gültig. Möglicherweise möchten Sie jedoch einen Teil-Trace erstellen. Sie können die Suspend-Option und die Trace-API (com.ibm.jvm.Trace-Klasse) verwenden, um den Anfang und das Ende des Trace zu steuern. Starten Sie zunächst die JVM mit dem Trace, der mit der unten gezeigten Suspend-Option angehalten wurde.

-Xtrace:methods={*},print=mt,suspend

Rufen Sie dann Trace.resume () von Ihrem Java-Programm aus auf, in dem Sie die Ablaufverfolgung starten möchten, um die Ablaufverfolgung zu starten. Rufen Sie abschließend Trace.suspend () auf, um den Trace wieder in einen angehaltenen Zustand zu versetzen. Das folgende HelloMT2.java ist ein Beispiel.

HelloMT2.java


package sample;
import com.ibm.jvm.Trace;

public class HelloMT2 {
    private void say() {
        System.out.println("Hello Method Trace.");
        sayMore("Enjoy Method Trace!");
    }
    private void sayMore(String message) {
        System.out.println(message);
    }
    public static void main(String args[]) {
        HelloMT2 hello = new HelloMT2();
        Trace.resume();
        hello.say();
        Trace.suspend();
    }
}

das ist alles.

Referenzlink

IBM SDK, Java Technology Edition, Version 8 IBM Java Online-Handbuch. https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/welcome/welcome_javasdk_version.html

Using method trace Dies ist die oberste Seite von Method Trace im IBM Java Online Manual. https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/method_trace.html

Controlling the trace Dies ist die oberste Seite von Method Trace im IBM Java Online Manual. https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/trace_control.html

Detailed descriptions of trace options Auf dieser Seite werden die Details und die Syntax der Methoden zur Methodenverfolgung erläutert. https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/trace_options_detail.html

Using the Java API Auf dieser Seite wird die Verwendung der Java-API (com.ibm.jvm.Trace-Klasse) erläutert. https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/trace_app_api.html

Running the trace formatter Auf dieser Seite wird erläutert, wie der Formatierer (com.ibm.jvm.format.TraceFormat) verwendet wird, der für die Ausgabe des Trace in eine Datei erforderlich ist (siehe Beispiel 5 oben). https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/trace_formatter.html

Andere (Notizen usw.)

Hier sind einige Notizen, auf die ich tatsächlich eingegangen bin.

Vorsichtsmaßnahmen bei Verwendung in der Windows-Version der WebSphere Application Server Liberty Profile-Umgebung

Bei Verwendung der Methodenverfolgung in der WebSphere Application Server Liberty Profile-Umgebung (im Folgenden als WAS Liberty-Umgebung bezeichnet) wird die Option "-Xtrace: Methods = ..." in der Datei "jvm.options" beschrieben, jedoch in der Windows-Version von WAS In der Liberty-Umgebung muss das Symbol "!" Mit einem "^" (Hut-Symbol) maskiert werden, wenn Ausschlüsse als Option angegeben werden (da der Startbefehl für den WAS Liberty-Server in der Windows-Batchdatei implementiert ist). .. Ein Beschreibungsbeispiel ist unten gezeigt. -Xtrace:methods={sample/*,^!sample/Hello.set*},print=mt

Wenn Sie in einer Eclipse-IDE-Umgebung nicht auf com.ibm.jvm.Trace zugreifen können

Wenn Sie versuchen, com.ibm.jvm.Trace in eine Eclipse-basierte IDE-Umgebung zu importieren, kann aufgrund von Zugriffsbeschränkungen (Hinweis 1) ein Fehler auftreten und Sie können möglicherweise nicht kompilieren. Hinweis 1) Wenn Sie mit der Maus über die Fehlermarkierung fahren, wird die Meldung "Zugriffsbeschränkung: Der Typ 'Trace' ist keine API (Einschränkung der erforderlichen Bibliothek ...") angezeigt.

Dies kann durch folgende Maßnahmen vermieden werden (Anmerkung 2). Hinweis 2) Der Screenshot in der Erläuterung ist die Operation in ** IBM Rational Application Developer V9.6.1 **.

Klicken Sie mit der rechten Maustaste auf den Projektordner und wählen Sie: Aus dem Kontextmenü: ** Erstellungspfad (B) **> ** Erstellungspfadkonfiguration (C) **

Das Dialogfeld "Java Build Path" wird angezeigt. Wählen Sie die Registerkarte ** Bibliothek (L) **. Klicken Sie auf das Dreiecksymbol in ** JRE System Library **, um es zu erweitern Wählen Sie oben im erweiterten Bereich ** Zugriffsregel ** aus und klicken Sie auf die Schaltfläche ** Bearbeiten **. image.png Das Dialogfeld "Typzugriffsregel" wird angezeigt. Klicken Sie auf die Schaltfläche ** Hinzufügen (A) **. image.png

Das Dialogfeld "Zugriffsregel hinzufügen" wird angezeigt.

Nachdem Sie bestätigt haben, dass auf "com / ibm / jvm" zugegriffen werden kann, klicken Sie auf die Schaltfläche "OK", um den geöffneten Dialog zu schließen. image.png

Die Fehlermarkierung links neben der Java-Quellimportanweisung sollte jetzt verschwinden.

Recommended Posts

Versuchen Sie es mit der IBM Java-Methodenverfolgung
Versuchen Sie es mit der Methode each_with_index
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Java-Methode
Versuchen Sie es mit Redis mit Java (jar)
Java-Methode
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie, die öffentliche Java-Methode zu extrahieren
[Java] -Methode
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
[Java] -Methode
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Versuchen Sie es mit der Stream-API in Java
Java lernen Versuchen Sie es mit einem Scanner oder einer Karte
Versuchen Sie es mit der JSON-Format-API in Java
Versuchen Sie es mit der REST-API von JobScheduler - Java RestClient-Implementierung -
Versuchen Sie es mit der Wii-Fernbedienung in Java
Versuchen Sie es mit libGDX
Versuchen Sie es mit Maven
Versuchen Sie es mit powermock-mockito2-2.0.2
Versuchen Sie es mit GraalVM
Probieren Sie Java 8 Stream aus
Versuchen Sie es mit jmockit 1.48
Java8-Methodenreferenz
[Java] forEach-Methode
Versuchen Sie es mit SwiftLint
Versuchen Sie es mit Log4j 2.0
Java8-Methodenreferenz
Versuchen Sie es mit Java 9
[Java] Zufällige Methode
[Java] Split-Methode
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Versuchen Sie es mit der RestClient Test-Klasse der REST-API-Java von JobScheduler.
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Versuchen Sie eine ähnliche Suche in der Bildsuche mit dem Java SDK [Suche]
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Versuchen Sie es mit dem Axon Framework
Sortieren mit Java-Komparator
Versuchen Sie es mit der REST-API von JobScheduler
JAVA DB-Verbindungsmethode
Versuchen Sie es mit der WhiteBox von PowerMock
Versuchen Sie, das Eratostenes-Sieb mithilfe der Java-Standardbibliothek zu implementieren
Probieren Sie die ähnliche Suche von Image Search mit Java SDK [Registrierung] aus.
Java-Lernnotiz (Methode)
Informationen zur Bindung von Java-Methoden
Versuchen Sie es mit Talend Teil 2
Informationen zu Aufteilungsmethoden (Java)
Java 8 studieren (siehe Methode)
Schrottpraxis mit Java ②
Rufen wir IBM Watson Assistant 2018-07-10 aus dem Java SDK auf.
Java-Programmierung (Klassenmethode)
Schrottpraxis mit Java ①
Training mit der Methode each_with_index