| /* |
| * 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 |