< prev index next >
src/share/vm/services/diagnosticCommand.cpp
Print this page
*** 69,78 ****
--- 69,80 ----
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SymboltableDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<StringtableDCmd>(full_export, true, false));
#endif // INCLUDE_SERVICES
#if INCLUDE_JVMTI
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIDataDumpDCmd>(full_export, true, false));
+ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIAgentLoadDCmd>(full_export, true, false));
+ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIJavaAgentLoadDCmd>(full_export, true, false));
#endif // INCLUDE_JVMTI
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ThreadDumpDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassLoaderStatsDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompileQueueDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeListDCmd>(full_export, true, false));
*** 252,261 ****
--- 254,326 ----
if (JvmtiExport::should_post_data_dump()) {
JvmtiExport::post_data_dump();
}
}
+ JVMTIAgentLoadDCmd::JVMTIAgentLoadDCmd(outputStream* output, bool heap) :
+ DCmdWithParser(output, heap),
+ _libpath("library path", "Absolute path of the JVMTI agent to load.",
+ "STRING", true),
+ _option("agent option", "Option string to pass the agent.", "STRING", false) {
+ _dcmdparser.add_dcmd_argument(&_libpath);
+ _dcmdparser.add_dcmd_argument(&_option);
+ }
+
+ void JVMTIAgentLoadDCmd::execute(DCmdSource source, TRAPS) {
+ JvmtiExport::load_agent_library(_libpath.value(), "true",
+ _option.value(), output());
+ }
+
+ int JVMTIAgentLoadDCmd::num_arguments() {
+ ResourceMark rm;
+ JVMTIAgentLoadDCmd* dcmd = new JVMTIAgentLoadDCmd(NULL, false);
+ if (dcmd != NULL) {
+ DCmdMark mark(dcmd);
+ return dcmd->_dcmdparser.num_arguments();
+ } else {
+ return 0;
+ }
+ }
+
+ JVMTIJavaAgentLoadDCmd::JVMTIJavaAgentLoadDCmd(
+ outputStream* output, bool heap) :
+ DCmdWithParser(output, heap),
+ _libpath("library path", "Absolute path of the JVMTI agent to load.",
+ "STRING", true),
+ _option("agent option", "Option string to pass the agent.", "STRING", false) {
+ _dcmdparser.add_dcmd_argument(&_libpath);
+ _dcmdparser.add_dcmd_argument(&_option);
+ }
+
+ void JVMTIJavaAgentLoadDCmd::execute(DCmdSource source, TRAPS) {
+ size_t option_len = strlen(_libpath.value());
+ char *options;
+
+ if (_option.value() == NULL) {
+ options = os::strdup(_libpath.value());
+ } else {
+ option_len += strlen(_option.value()) + 1;
+ options = (char *)os::malloc(option_len + 1, mtInternal);
+ sprintf(options, "%s=%s", _libpath.value(), _option.value());
+ }
+
+ JvmtiExport::load_agent_library("instrument", "false", options, output());
+
+ os::free(options);
+ }
+
+ int JVMTIJavaAgentLoadDCmd::num_arguments() {
+ ResourceMark rm;
+ JVMTIJavaAgentLoadDCmd* dcmd = new JVMTIJavaAgentLoadDCmd(NULL, false);
+ if (dcmd != NULL) {
+ DCmdMark mark(dcmd);
+ return dcmd->_dcmdparser.num_arguments();
+ } else {
+ return 0;
+ }
+ }
+
void PrintSystemPropertiesDCmd::execute(DCmdSource source, TRAPS) {
// load sun.misc.VMSupport
Symbol* klass = vmSymbols::sun_misc_VMSupport();
Klass* k = SystemDictionary::resolve_or_fail(klass, true, CHECK);
instanceKlassHandle ik (THREAD, k);
< prev index next >