1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 /* 17 * String constants to go along with enumerated values. (Pity we don't 18 * have enumerated constant reflection in C.) These are only needed for 19 * making the output human-readable. 20 */ 21 #include "jdwp/JdwpConstants.h" 22 23 /* 24 * Return a string for the error code. 25 */ 26 const char* dvmJdwpErrorStr(JdwpError error) 27 { 28 switch (error) { 29 case ERR_NONE: 30 return "NONE"; 31 case ERR_INVALID_THREAD: 32 return "INVALID_THREAD"; 33 case ERR_INVALID_THREAD_GROUP: 34 return "INVALID_THREAD_GROUP"; 35 case ERR_INVALID_PRIORITY: 36 return "INVALID_PRIORITY"; 37 case ERR_THREAD_NOT_SUSPENDED: 38 return "THREAD_NOT_SUSPENDED"; 39 case ERR_THREAD_SUSPENDED: 40 return "THREAD_SUSPENDED"; 41 case ERR_INVALID_OBJECT: 42 return "INVALID_OBJEC"; 43 case ERR_INVALID_CLASS: 44 return "INVALID_CLASS"; 45 case ERR_CLASS_NOT_PREPARED: 46 return "CLASS_NOT_PREPARED"; 47 case ERR_INVALID_METHODID: 48 return "INVALID_METHODID"; 49 case ERR_INVALID_LOCATION: 50 return "INVALID_LOCATION"; 51 case ERR_INVALID_FIELDID: 52 return "INVALID_FIELDID"; 53 case ERR_INVALID_FRAMEID: 54 return "INVALID_FRAMEID"; 55 case ERR_NO_MORE_FRAMES: 56 return "NO_MORE_FRAMES"; 57 case ERR_OPAQUE_FRAME: 58 return "OPAQUE_FRAME"; 59 case ERR_NOT_CURRENT_FRAME: 60 return "NOT_CURRENT_FRAME"; 61 case ERR_TYPE_MISMATCH: 62 return "TYPE_MISMATCH"; 63 case ERR_INVALID_SLOT: 64 return "INVALID_SLOT"; 65 case ERR_DUPLICATE: 66 return "DUPLICATE"; 67 case ERR_NOT_FOUND: 68 return "NOT_FOUND"; 69 case ERR_INVALID_MONITOR: 70 return "INVALID_MONITOR"; 71 case ERR_NOT_MONITOR_OWNER: 72 return "NOT_MONITOR_OWNER"; 73 case ERR_INTERRUPT: 74 return "INTERRUPT"; 75 case ERR_INVALID_CLASS_FORMAT: 76 return "INVALID_CLASS_FORMAT"; 77 case ERR_CIRCULAR_CLASS_DEFINITION: 78 return "CIRCULAR_CLASS_DEFINITION"; 79 case ERR_FAILS_VERIFICATION: 80 return "FAILS_VERIFICATION"; 81 case ERR_ADD_METHOD_NOT_IMPLEMENTED: 82 return "ADD_METHOD_NOT_IMPLEMENTED"; 83 case ERR_SCHEMA_CHANGE_NOT_IMPLEMENTED: 84 return "SCHEMA_CHANGE_NOT_IMPLEMENTED"; 85 case ERR_INVALID_TYPESTATE: 86 return "INVALID_TYPESTATE"; 87 case ERR_HIERARCHY_CHANGE_NOT_IMPLEMENTED: 88 return "HIERARCHY_CHANGE_NOT_IMPLEMENTED"; 89 case ERR_DELETE_METHOD_NOT_IMPLEMENTED: 90 return "DELETE_METHOD_NOT_IMPLEMENTED"; 91 case ERR_UNSUPPORTED_VERSION: 92 return "UNSUPPORTED_VERSION"; 93 case ERR_NAMES_DONT_MATCH: 94 return "NAMES_DONT_MATCH"; 95 case ERR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED: 96 return "CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED"; 97 case ERR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED: 98 return "METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED"; 99 case ERR_NOT_IMPLEMENTED: 100 return "NOT_IMPLEMENTED"; 101 case ERR_NULL_POINTER: 102 return "NULL_POINTER"; 103 case ERR_ABSENT_INFORMATION: 104 return "ABSENT_INFORMATION"; 105 case ERR_INVALID_EVENT_TYPE: 106 return "INVALID_EVENT_TYPE"; 107 case ERR_ILLEGAL_ARGUMENT: 108 return "ILLEGAL_ARGUMENT"; 109 case ERR_OUT_OF_MEMORY: 110 return "OUT_OF_MEMORY"; 111 case ERR_ACCESS_DENIED: 112 return "ACCESS_DENIED"; 113 case ERR_VM_DEAD: 114 return "VM_DEAD"; 115 case ERR_INTERNAL: 116 return "INTERNAL"; 117 case ERR_UNATTACHED_THREAD: 118 return "UNATTACHED_THREAD"; 119 case ERR_INVALID_TAG: 120 return "INVALID_TAG"; 121 case ERR_ALREADY_INVOKING: 122 return "ALREADY_INVOKING"; 123 case ERR_INVALID_INDEX: 124 return "INVALID_INDEX"; 125 case ERR_INVALID_LENGTH: 126 return "INVALID_LENGTH"; 127 case ERR_INVALID_STRING: 128 return "INVALID_STRING"; 129 case ERR_INVALID_CLASS_LOADER: 130 return "INVALID_CLASS_LOADER"; 131 case ERR_INVALID_ARRAY: 132 return "INVALID_ARRAY"; 133 case ERR_TRANSPORT_LOAD: 134 return "TRANSPORT_LOAD"; 135 case ERR_TRANSPORT_INIT: 136 return "TRANSPORT_INIT"; 137 case ERR_NATIVE_METHOD: 138 return "NATIVE_METHOD"; 139 case ERR_INVALID_COUNT: 140 return "INVALID_COUNT"; 141 default: 142 return "?UNKNOWN?"; 143 } 144 } 145 146 /* 147 * Return a string for the EventKind. 148 */ 149 const char* dvmJdwpEventKindStr(JdwpEventKind kind) 150 { 151 switch (kind) { 152 case EK_SINGLE_STEP: return "SINGLE_STEP"; 153 case EK_BREAKPOINT: return "BREAKPOINT"; 154 case EK_FRAME_POP: return "FRAME_POP"; 155 case EK_EXCEPTION: return "EXCEPTION"; 156 case EK_USER_DEFINED: return "USER_DEFINED"; 157 case EK_THREAD_START: return "THREAD_START"; 158 /*case EK_THREAD_END: return "THREAD_END";*/ 159 case EK_CLASS_PREPARE: return "CLASS_PREPARE"; 160 case EK_CLASS_UNLOAD: return "CLASS_UNLOAD"; 161 case EK_CLASS_LOAD: return "CLASS_LOAD"; 162 case EK_FIELD_ACCESS: return "FIELD_ACCESS"; 163 case EK_FIELD_MODIFICATION: return "FIELD_MODIFICATION"; 164 case EK_EXCEPTION_CATCH: return "EXCEPTION_CATCH"; 165 case EK_METHOD_ENTRY: return "METHOD_ENTRY"; 166 case EK_METHOD_EXIT: return "METHOD_EXIT"; 167 case EK_VM_INIT: return "VM_INIT"; 168 case EK_VM_DEATH: return "VM_DEATH"; 169 case EK_VM_DISCONNECTED: return "VM_DISCONNECTED"; 170 /*case EK_VM_START: return "VM_START";*/ 171 case EK_THREAD_DEATH: return "THREAD_DEATH"; 172 default: return "?UNKNOWN?"; 173 } 174 } 175 176 /* 177 * Return a string for the ModKind. 178 */ 179 const char* dvmJdwpModKindStr(JdwpModKind kind) 180 { 181 switch (kind) { 182 case MK_COUNT: return "COUNT"; 183 case MK_CONDITIONAL: return "CONDITIONAL"; 184 case MK_THREAD_ONLY: return "THREAD_ONLY"; 185 case MK_CLASS_ONLY: return "CLASS_ONLY"; 186 case MK_CLASS_MATCH: return "CLASS_MATCH"; 187 case MK_CLASS_EXCLUDE: return "CLASS_EXCLUDE"; 188 case MK_LOCATION_ONLY: return "LOCATION_ONLY"; 189 case MK_EXCEPTION_ONLY: return "EXCEPTION_ONLY"; 190 case MK_FIELD_ONLY: return "FIELD_ONLY"; 191 case MK_STEP: return "STEP"; 192 case MK_INSTANCE_ONLY: return "INSTANCE_ONLY"; 193 default: return "?UNKNOWN?"; 194 } 195 } 196 197 /* 198 * Return a string for the StepDepth. 199 */ 200 const char* dvmJdwpStepDepthStr(JdwpStepDepth depth) 201 { 202 switch (depth) { 203 case SD_INTO: return "INTO"; 204 case SD_OVER: return "OVER"; 205 case SD_OUT: return "OUT"; 206 default: return "?UNKNOWN?"; 207 } 208 } 209 210 /* 211 * Return a string for the StepSize. 212 */ 213 const char* dvmJdwpStepSizeStr(JdwpStepSize size) 214 { 215 switch (size) { 216 case SS_MIN: return "MIN"; 217 case SS_LINE: return "LINE"; 218 default: return "?UNKNOWN?"; 219 } 220 } 221 222 /* 223 * Return a string for the SuspendPolicy. 224 */ 225 const char* dvmJdwpSuspendPolicyStr(JdwpSuspendPolicy policy) 226 { 227 switch (policy) { 228 case SP_NONE: return "NONE"; 229 case SP_EVENT_THREAD: return "EVENT_THREAD"; 230 case SP_ALL: return "ALL"; 231 default: return "?UNKNOWN?"; 232 } 233 } 234 235 /* 236 * Return a string for the SuspendStatus. 237 */ 238 const char* dvmJdwpSuspendStatusStr(JdwpSuspendStatus status) 239 { 240 switch (status) { 241 case SUSPEND_STATUS_NOT_SUSPENDED: return "Not SUSPENDED"; 242 case SUSPEND_STATUS_SUSPENDED: return "SUSPENDED"; 243 default: return "?UNKNOWN?"; 244 } 245 } 246 247 /* 248 * Return a string for the ThreadStatus. 249 */ 250 const char* dvmJdwpThreadStatusStr(JdwpThreadStatus status) 251 { 252 switch (status) { 253 case TS_ZOMBIE: return "ZOMBIE"; 254 case TS_RUNNING: return "RUNNING"; 255 case TS_SLEEPING: return "SLEEPING"; 256 case TS_MONITOR: return "MONITOR"; 257 case TS_WAIT: return "WAIT"; 258 default: return "?UNKNOWN?"; 259 } 260 }; 261