Ich arbeite an JVMTI-Agent und ich möchte den gleichen Thread auf Methode eingeben und beenden. Ich kann einen Thread-Namen erhalten, aber das ist nicht ausreichend.Wie eindeutig Thread in jvmti identifizieren
Stellen Sie sich vor, ein Verfahren wie dieses:
public class Main {
public static void myMethod() {
System.out.println("doing something as " + Thread.currentThread().getName());
Thread.currentThread().setName("SomethingDifferent");
System.out.println("doing something as same thread " + Thread.currentThread().getName());
}
}
diese Methode So Eingabe wird einen Namen haben und diesen Thread verlass anderen Namen.
Wenn JVMTI wie folgt aus:
static void JNICALL callback_on_method_entry(jvmtiEnv *jvmti, JNIEnv* env,
jthread thread, jmethodID method)
{
...
(*jvmti)->GetThreadInfo(jvmti, thread, &info);
...
}
static void JNICALL callback_on_method_exit(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jmethodID method, jboolean was_popped_by_exception, jvalue return_value)
{
...
(*jvmti)->GetThreadInfo(jvmti, thread, &info);
...
}
Jeder info
anderen Thread Name berichten, und ich will für sie die gleiche Kennung haben.
Wie bekomme ich die gleiche Kennung für den Thread?
Eine Lösung kann sein, Feldwert des referenzierten Thread
(tid
) zu erhalten. Wie geht das? Ich kann durch den Heap iterieren, aber ich kann den Feldnamen nicht erhalten.
... ist irgendwo eine Frage versteckt oder wollten Sie einfach Ihre Erfahrungen teilen? – specializt
Sie müssen sich den Titel ansehen. Aber sicher habe ich Fragen in den Artikel eingefügt. – czs
Das ist keine Frage, es ist eine Aussage. Plus: Das vollständige Ausschließen Ihrer tatsächlichen Fragen in Ihren Inhalten garantiert Ihnen garantiert genau null Antworten. Dies ist kein Blog oder Forum irgendeiner Art, die Leute WOLLEN helfen, aber auch ablehnen, dies zu tun, wenn Sie nicht einmal eine einfache Frage zusammenstellen können .... die meiste Zeit – specializt