Testmonitormanager für Java-Anwendungen
Java™ Probe Manager (JPM) unterstützt das Testen von Java-Anwendungen auf dieselbe Weise wie C-und C + + -Testmonitormanager. Ein einzelnes Vue-Script sollte in der Lage sein, mehrere Java-Anwendungen gleichzeitig unter Verwendung unterschiedlicher Prozess-IDs der JVMs zu verfolgen. Dasselbe Script kann verwendet werden, um Systemaufrufe oder C/C + + -Anwendungen zusammen mit Java-Anwendungen zu testen und andere Testmonitormanager zu verwenden.
Wie uft (User Function Tracing) akzeptiert auch der Java-Testmonitormanager des Testmonitormanagers 5-Tupel-Testmonitorspezifikationen im folgenden Format:
uftjava :< process_ID> :*:< _qualified_function_name >: entry
Dabei ist das zweite Tupel die Prozess-ID des JVM-Prozesses, der der Java-Anwendung entspricht, für die ein Trace erstellt wird.
Drittes Feld: reserviert für zukünftige Verwendung.
Viertes Feld: Hier muss die Java-Methode angegeben werden.
Dieser Name ist ein vollständig qualifizierter Name, der in Java-Anwendungen wie Mypackage.Myclass.Mymethodverwendet wird.
Einige der Einschränkungen, die gelten können, sind
- Nur reine Java-Methoden können getestet werden, native (gemeinsam genutzte Bibliotheksaufrufe) oder verschlüsselte Codes sind nicht tracefähig.
- Nur Eingangstests werden unterstützt.
- Kann nur JVM Version 1.5 und höher unterstützen, die die JVMTI-Schnittstelle unterstützt.
- Zu keinem Zeitpunkt können zwei Probevue-Sitzungen dieselbe Java-Anwendung mit @@uftjavatesten.
- Polymorphe/Überladene Methoden werden nicht unterstützt.
- Das Tracing/Zugreifen auf externe Variablen mit demselben Namen wie eines der Probevue-Schlüsselwörter oder integrierte Namen wird nicht unterstützt. Möglicherweise müssen diese externen Symbole (Namen von Java-Anwendungsvariablen) umbenannt werden.
- Der Zugriff auf Arrays von Java-Anwendungen wird in diesem Release nicht unterstützt.
- Der Zugriff auf Arrays von Java-Anwendungen wird in diesem Release nicht unterstützt.
- Die integrierte Funktion get_function () für die Sprache Java wird in dieser Version nicht unterstützt.
Datenzugriff: Die Aktionsblöcke von Java-Testmonitoren können auf die folgenden Daten zugreifen, die dem vorhandenen Verhalten ähneln.
- Aktionsblock kann auf globale, lokale und Kernel-Script-Variablen zugreifen.
- Aktionsblock kann auf Methodenargumente (Eintragsklassenvariablen) primitiver Typen zugreifen.
- Der Aktionsblock kann auf die integrierten Variablen zugreifen.
- Der Aktionsblock kann über vollständig qualifizierte Namen auf Java-Anwendungsvariablen zugreifen, nur statisch (Klassenelemente).
x = some_package.app.class.var_x; //Access static/class member.
- Der Zugriff auf Variablen für primitive Java-Anwendungstypen wird unterstützt. Sie müssen implizit konvertiert, hochgestuft oder umgesetzt werden, ohne dass der Wert für äquivalente Typen in der Sprache Vue verloren geht. Die tatsächliche Speicherbelegung (Größe) kann jedoch von der Java-Sprache abweichen.
Die im Kontext des Java-Testmonitormanagers unterstützten Funktionen sind in der folgenden Tabelle aufgelistet:
Funktion | Beschreibung |
---|---|
stktrace () | Stellt den Stack-Trace der Java-Anwendung (aktiver Thread) bereit, für die ein Trace erstellt wird |
copy_userdata () | Kopieren Sie Daten aus der Java-Anwendung in Scriptvariablen. |
get_probe () | Gibt die Zeichenfolge des Testmonitors zurück. |
Befehl 'get_stktrace' | Gibt den Laufzeit-Stack-Trace zurück |
get_location_point () | Gibt die aktuelle Testmonitorposition zurück. |
get_userstring () | Zeichenfolgedaten aus Java-Anwendung kopieren. |
exit() | beendet die probevue-Tracesitzung. |
Änderungen am Probevue-Befehl:
Befehl | Beschreibung |
---|---|
-Option -X | Diese Option kann (zusammen mit der Option -A ) verwendet werden, um eine Java-Anwendung zu starten. In der aktuellen Version muss der Benutzer manuell eine zusätzliche optionale Zeichenkette agentlib:probevuejava zusammen mit allen anderen Optionen übergeben, die zur Ausführung der Java-Anwendung erforderlich sind. |
Beispiel:
probevue -X /usr/java5/bin/java -A -agentlib:probevuejava myjavaapp myscript.e
Wenn Sie die 64-Bit-JVM ausführen, müssen Sie "agentlib:probevuejava64" wie folgt verwenden:
probevue -X /usr/java5_64/bin/java -A -agentlib:probevuejava64 myjavaapp myscript.e
where myjavaapp is the java class of myjavaapp.java application
Beispiel für ExtendedClass.java Quelle:
class BaseClass
{
static int i=10;
public static void test(int x)
{
i += x;
}
}
public class ExtendedClass extends BaseClass
{
public static void test(int x, String msg)
{
i += x;
System.out.print("Java: " + msg + "\n\n");
BaseClass.test(x);
}
public static void main(String[] args)
{
BaseClass.test(5);
ExtendedClass.test(10, "hello");
}
}
Beispielscript test.e für die obige Java-Anwendung:
@@uftjava:$__CPID:*:"BaseClass.test":entry
{
printf("BaseClass.i: %d\n", BaseClass.i);
printf("BaseClass.test: %d\n", __arg1);
stktrace(0, -1);
printf("\n");
}
@@uftjava:$__CPID:*:"ExtendedClass.test":entry
{
printf("BaseClass.i: %d\n", BaseClass.i);
printf("ExtendedClass.test: %d, %s\n", __arg1, __arg2);
stktrace(0, -1);
printf("\n");
}
ProbeVue -Beispielsitzung mit dem obigen Script:
# probevue -X /usr/java5/jre/bin/java \
-A "-agentlib:probevuejava ExtendedClass" test.e
Java: hello
BaseClass.i: 10
BaseClass.test: 5
BaseClass.test()+0
ExtendedClass.main()+1
BaseClass.i: 15
ExtendedClass.test: 10, hello
ExtendedClass.test()+0
ExtendedClass.main()+8
BaseClass.i: 25
BaseClass.test: 10
BaseClass.test()+0
ExtendedClass.test()+39
ExtendedClass.main()+8