blob: 7110eed2cefd1a9aa6370fbae0b10a043aa3552a [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* String constants to go along with enumerated values. (Pity we don't
* have enumerated constant reflection in C.) These are only needed for
* making the output human-readable.
*/
#include "jdwp/jdwp_constants.h"
#include <iostream>
namespace art {
namespace JDWP {
const char* ErrorStr(JdwpError error) {
switch (error) {
case ERR_NONE:
return "NONE";
case ERR_INVALID_THREAD:
return "INVALID_THREAD";
case ERR_INVALID_THREAD_GROUP:
return "INVALID_THREAD_GROUP";
case ERR_INVALID_PRIORITY:
return "INVALID_PRIORITY";
case ERR_THREAD_NOT_SUSPENDED:
return "THREAD_NOT_SUSPENDED";
case ERR_THREAD_SUSPENDED:
return "THREAD_SUSPENDED";
case ERR_INVALID_OBJECT:
return "INVALID_OBJEC";
case ERR_INVALID_CLASS:
return "INVALID_CLASS";
case ERR_CLASS_NOT_PREPARED:
return "CLASS_NOT_PREPARED";
case ERR_INVALID_METHODID:
return "INVALID_METHODID";
case ERR_INVALID_LOCATION:
return "INVALID_LOCATION";
case ERR_INVALID_FIELDID:
return "INVALID_FIELDID";
case ERR_INVALID_FRAMEID:
return "INVALID_FRAMEID";
case ERR_NO_MORE_FRAMES:
return "NO_MORE_FRAMES";
case ERR_OPAQUE_FRAME:
return "OPAQUE_FRAME";
case ERR_NOT_CURRENT_FRAME:
return "NOT_CURRENT_FRAME";
case ERR_TYPE_MISMATCH:
return "TYPE_MISMATCH";
case ERR_INVALID_SLOT:
return "INVALID_SLOT";
case ERR_DUPLICATE:
return "DUPLICATE";
case ERR_NOT_FOUND:
return "NOT_FOUND";
case ERR_INVALID_MONITOR:
return "INVALID_MONITOR";
case ERR_NOT_MONITOR_OWNER:
return "NOT_MONITOR_OWNER";
case ERR_INTERRUPT:
return "INTERRUPT";
case ERR_INVALID_CLASS_FORMAT:
return "INVALID_CLASS_FORMAT";
case ERR_CIRCULAR_CLASS_DEFINITION:
return "CIRCULAR_CLASS_DEFINITION";
case ERR_FAILS_VERIFICATION:
return "FAILS_VERIFICATION";
case ERR_ADD_METHOD_NOT_IMPLEMENTED:
return "ADD_METHOD_NOT_IMPLEMENTED";
case ERR_SCHEMA_CHANGE_NOT_IMPLEMENTED:
return "SCHEMA_CHANGE_NOT_IMPLEMENTED";
case ERR_INVALID_TYPESTATE:
return "INVALID_TYPESTATE";
case ERR_HIERARCHY_CHANGE_NOT_IMPLEMENTED:
return "HIERARCHY_CHANGE_NOT_IMPLEMENTED";
case ERR_DELETE_METHOD_NOT_IMPLEMENTED:
return "DELETE_METHOD_NOT_IMPLEMENTED";
case ERR_UNSUPPORTED_VERSION:
return "UNSUPPORTED_VERSION";
case ERR_NAMES_DONT_MATCH:
return "NAMES_DONT_MATCH";
case ERR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED:
return "CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED";
case ERR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED:
return "METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED";
case ERR_NOT_IMPLEMENTED:
return "NOT_IMPLEMENTED";
case ERR_NULL_POINTER:
return "NULL_POINTER";
case ERR_ABSENT_INFORMATION:
return "ABSENT_INFORMATION";
case ERR_INVALID_EVENT_TYPE:
return "INVALID_EVENT_TYPE";
case ERR_ILLEGAL_ARGUMENT:
return "ILLEGAL_ARGUMENT";
case ERR_OUT_OF_MEMORY:
return "OUT_OF_MEMORY";
case ERR_ACCESS_DENIED:
return "ACCESS_DENIED";
case ERR_VM_DEAD:
return "VM_DEAD";
case ERR_INTERNAL:
return "INTERNAL";
case ERR_UNATTACHED_THREAD:
return "UNATTACHED_THREAD";
case ERR_INVALID_TAG:
return "INVALID_TAG";
case ERR_ALREADY_INVOKING:
return "ALREADY_INVOKING";
case ERR_INVALID_INDEX:
return "INVALID_INDEX";
case ERR_INVALID_LENGTH:
return "INVALID_LENGTH";
case ERR_INVALID_STRING:
return "INVALID_STRING";
case ERR_INVALID_CLASS_LOADER:
return "INVALID_CLASS_LOADER";
case ERR_INVALID_ARRAY:
return "INVALID_ARRAY";
case ERR_TRANSPORT_LOAD:
return "TRANSPORT_LOAD";
case ERR_TRANSPORT_INIT:
return "TRANSPORT_INIT";
case ERR_NATIVE_METHOD:
return "NATIVE_METHOD";
case ERR_INVALID_COUNT:
return "INVALID_COUNT";
default:
return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpError& value) {
os << ErrorStr(value);
return os;
}
const char* EventKindStr(JdwpEventKind kind) {
switch (kind) {
case EK_SINGLE_STEP: return "SINGLE_STEP";
case EK_BREAKPOINT: return "BREAKPOINT";
case EK_FRAME_POP: return "FRAME_POP";
case EK_EXCEPTION: return "EXCEPTION";
case EK_USER_DEFINED: return "USER_DEFINED";
case EK_THREAD_START: return "THREAD_START";
/*case EK_THREAD_END: return "THREAD_END";*/
case EK_CLASS_PREPARE: return "CLASS_PREPARE";
case EK_CLASS_UNLOAD: return "CLASS_UNLOAD";
case EK_CLASS_LOAD: return "CLASS_LOAD";
case EK_FIELD_ACCESS: return "FIELD_ACCESS";
case EK_FIELD_MODIFICATION: return "FIELD_MODIFICATION";
case EK_EXCEPTION_CATCH: return "EXCEPTION_CATCH";
case EK_METHOD_ENTRY: return "METHOD_ENTRY";
case EK_METHOD_EXIT: return "METHOD_EXIT";
case EK_VM_INIT: return "VM_INIT";
case EK_VM_DEATH: return "VM_DEATH";
case EK_VM_DISCONNECTED: return "VM_DISCONNECTED";
/*case EK_VM_START: return "VM_START";*/
case EK_THREAD_DEATH: return "THREAD_DEATH";
default: return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpEventKind& value) {
os << EventKindStr(value);
return os;
}
const char* ModKindStr(JdwpModKind kind) {
switch (kind) {
case MK_COUNT: return "COUNT";
case MK_CONDITIONAL: return "CONDITIONAL";
case MK_THREAD_ONLY: return "THREAD_ONLY";
case MK_CLASS_ONLY: return "CLASS_ONLY";
case MK_CLASS_MATCH: return "CLASS_MATCH";
case MK_CLASS_EXCLUDE: return "CLASS_EXCLUDE";
case MK_LOCATION_ONLY: return "LOCATION_ONLY";
case MK_EXCEPTION_ONLY: return "EXCEPTION_ONLY";
case MK_FIELD_ONLY: return "FIELD_ONLY";
case MK_STEP: return "STEP";
case MK_INSTANCE_ONLY: return "INSTANCE_ONLY";
default: return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpModKind& value) {
os << ModKindStr(value);
return os;
}
const char* StepDepthStr(JdwpStepDepth depth) {
switch (depth) {
case SD_INTO: return "INTO";
case SD_OVER: return "OVER";
case SD_OUT: return "OUT";
default: return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpStepDepth& value) {
os << StepDepthStr(value);
return os;
}
const char* StepSizeStr(JdwpStepSize size) {
switch (size) {
case SS_MIN: return "MIN";
case SS_LINE: return "LINE";
default: return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpStepSize& value) {
os << StepSizeStr(value);
return os;
}
const char* SuspendPolicyStr(JdwpSuspendPolicy policy) {
switch (policy) {
case SP_NONE: return "NONE";
case SP_EVENT_THREAD: return "EVENT_THREAD";
case SP_ALL: return "ALL";
default: return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpSuspendPolicy& value) {
os << SuspendPolicyStr(value);
return os;
}
const char* SuspendStatusStr(JdwpSuspendStatus status) {
switch (status) {
case SUSPEND_STATUS_NOT_SUSPENDED: return "Not SUSPENDED";
case SUSPEND_STATUS_SUSPENDED: return "SUSPENDED";
default: return "?UNKNOWN?";
}
}
std::ostream& operator<<(std::ostream& os, const JdwpSuspendStatus& value) {
os << SuspendStatusStr(value);
return os;
}
const char* ThreadStatusStr(JdwpThreadStatus status) {
switch (status) {
case TS_ZOMBIE: return "ZOMBIE";
case TS_RUNNING: return "RUNNING";
case TS_SLEEPING: return "SLEEPING";
case TS_MONITOR: return "MONITOR";
case TS_WAIT: return "WAIT";
default: return "?UNKNOWN?";
}
};
std::ostream& operator<<(std::ostream& os, const JdwpThreadStatus& value) {
os << ThreadStatusStr(value);
return os;
}
} // namespace JDWP
} // namespace art