char* name; char* sig; char* gen; // Note: technically putting the caller class here is wrong, but we don't need it, anyways.
jvmtiError result = jvmti_env->GetFieldName(klass, id, &name, &sig, &gen); if (result != JVMTI_ERROR_NONE) { char* err;
jvmti_env->GetErrorName(result, &err);
printf("Failure running GetFieldName: %s\n", err);
jvmti_env->Deallocate(reinterpret_cast<unsignedchar*>(err)); return nullptr;
}
auto callback = [&](jint i) { if (i == 0) { return name == nullptr ? nullptr : env->NewStringUTF(name);
} elseif (i == 1) { return sig == nullptr ? nullptr : env->NewStringUTF(sig);
} else { return gen == nullptr ? nullptr : env->NewStringUTF(gen);
}
};
jobjectArray ret = CreateObjectArray(env, 3, "java/lang/String", callback);
// Need to deallocate the strings. if (name != nullptr) {
jvmti_env->Deallocate(reinterpret_cast<unsignedchar*>(name));
} if (sig != nullptr) {
jvmti_env->Deallocate(reinterpret_cast<unsignedchar*>(sig));
} if (gen != nullptr) {
jvmti_env->Deallocate(reinterpret_cast<unsignedchar*>(gen));
}
// Also run GetMethodName with all parameter pointers null to check for segfaults.
jvmtiError result2 = jvmti_env->GetFieldName(klass, id, nullptr, nullptr, nullptr); if (result2 != JVMTI_ERROR_NONE) { char* err;
jvmti_env->GetErrorName(result2, &err);
printf("Failure running GetFieldName(null, null, null): %s\n", err);
jvmti_env->Deallocate(reinterpret_cast<unsignedchar*>(err)); return nullptr;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.