Mercurial > hg > graal-jvmci-8
diff src/share/vm/services/diagnosticFramework.hpp @ 4773:4f25538b54c9
7120511: Add diagnostic commands
Reviewed-by: acorn, phh, dcubed, sspitsyn
author | fparain |
---|---|
date | Mon, 09 Jan 2012 10:27:24 +0100 |
parents | 3b688d6ff3d0 |
children | a42c07c38c47 |
line wrap: on
line diff
--- a/src/share/vm/services/diagnosticFramework.hpp Thu Jan 05 17:16:13 2012 -0500 +++ b/src/share/vm/services/diagnosticFramework.hpp Mon Jan 09 10:27:24 2012 +0100 @@ -241,8 +241,17 @@ static int num_arguments() { return 0; } outputStream* output() { return _output; } bool is_heap_allocated() { return _is_heap_allocated; } - virtual void print_help(outputStream* out) { }; - virtual void parse(CmdLine* line, char delim, TRAPS) { } + virtual void print_help(const char* name) { + output()->print_cr("Syntax: %s", name); + } + virtual void parse(CmdLine* line, char delim, TRAPS) { + DCmdArgIter iter(line->args_addr(), line->args_len(), delim); + bool has_arg = iter.next(CHECK); + if (has_arg) { + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), + "Unknown argument in diagnostic command"); + } + } virtual void execute(TRAPS) { } virtual void reset(TRAPS) { } virtual void cleanup() { } @@ -262,6 +271,25 @@ char delim, TRAPS); }; +class DCmdWithParser : public DCmd { +protected: + DCmdParser _dcmdparser; +public: + DCmdWithParser (outputStream *output, bool heap=false) : DCmd(output, heap) { } + static const char* name() { return "No Name";} + static const char* description() { return "No Help";} + static const char* disabled_message() { return "Diagnostic command currently disabled"; } + static const char* impact() { return "Low: No impact"; } + static int num_arguments() { return 0; } + virtual void parse(CmdLine *line, char delim, TRAPS); + virtual void execute(TRAPS) { } + virtual void reset(TRAPS); + virtual void cleanup(); + virtual void print_help(const char* name); + virtual GrowableArray<const char*>* argument_name_array(); + virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array(); +}; + class DCmdMark : public StackObj { DCmd* _ref; public: