| /* |
| * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| * |
| */ |
| |
| package sun.jvm.hotspot.debugger.dummy; |
| |
| import java.util.*; |
| import sun.jvm.hotspot.debugger.*; |
| import sun.jvm.hotspot.debugger.cdbg.CDebugger; |
| import sun.jvm.hotspot.utilities.*; |
| |
| /** For testing purposes */ |
| |
| public class DummyDebugger extends DebuggerBase { |
| private MachineDescription machDesc; |
| |
| public DummyDebugger(MachineDescription machDesc) { |
| this.machDesc = machDesc; |
| } |
| |
| public boolean hasProcessList() throws DebuggerException { |
| return false; |
| } |
| |
| public List getProcessList() throws DebuggerException { |
| return null; |
| } |
| |
| public void attach(int processID) throws DebuggerException { |
| } |
| |
| public void attach(String executableName, String coreFileName) |
| throws DebuggerException { |
| } |
| |
| public boolean detach() { |
| return true; |
| } |
| |
| public Address parseAddress(String addrStr) { |
| String s = addrStr.trim(); |
| if (!s.startsWith("0x")) { |
| throw new NumberFormatException(addrStr); |
| } |
| long l = 0; |
| for (int i = 2; i < s.length(); ++i) { |
| int val = charToNibble(s.charAt(i)); |
| l <<= 4; |
| l |= val; |
| } |
| return new DummyAddress(this, l); |
| } |
| |
| public long getAddressValue(Address addr) { |
| if (addr == null) return 0; |
| return ((DummyAddress) addr).getValue(); |
| } |
| |
| public String getOS() { |
| return PlatformInfo.getOS(); |
| } |
| |
| public String getCPU() { |
| return PlatformInfo.getCPU(); |
| } |
| |
| public MachineDescription getMachineDescription() throws DebuggerException { |
| return machDesc; |
| } |
| |
| public boolean hasConsole() { |
| return false; |
| } |
| |
| public String consoleExecuteCommand(String cmd) |
| throws DebuggerException { |
| throw new DebuggerException("unimplemented"); |
| } |
| |
| public String getConsolePrompt() throws DebuggerException { |
| throw new DebuggerException("unimplemented"); |
| } |
| |
| public CDebugger getCDebugger() throws DebuggerException { |
| return null; |
| } |
| |
| public Address lookup(String objectName, String symbol) { |
| return null; |
| } |
| |
| public OopHandle lookupOop(String objectName, String symbol) { |
| return null; |
| } |
| |
| public ThreadProxy getThreadForIdentifierAddress(Address addr) { |
| return null; |
| } |
| |
| public ThreadProxy getThreadForThreadId(long id) { |
| return null; |
| } |
| |
| public ReadResult readBytesFromProcess(long address, long numBytes) |
| throws DebuggerException { |
| throw new DebuggerException("Unimplemented"); |
| } |
| |
| public void writeBytesToProcess(long a, long b, byte[] buf) |
| throws DebuggerException { |
| throw new DebuggerException("Unimplemented"); |
| } |
| |
| //---------------------------------------------------------------------- |
| // Package-internal routines |
| // |
| |
| String addressToString(DummyAddress addr) { |
| StringBuffer buf = new StringBuffer(); |
| buf.append("0x"); |
| String val; |
| if (addr == null) { |
| val = "0"; |
| } else { |
| val = Long.toHexString(addr.getValue()); |
| } |
| for (int i = 0; i < ((2 * machDesc.getAddressSize()) - val.length()); i++) { |
| buf.append('0'); |
| } |
| buf.append(val); |
| return buf.toString(); |
| } |
| |
| //---------------------------------------------------------------------- |
| // Internals only below this point |
| // |
| |
| private int charToNibble(char ascii) throws NumberFormatException { |
| if (ascii >= '0' && ascii <= '9') { |
| return ascii - '0'; |
| } else if (ascii >= 'A' && ascii <= 'F') { |
| return 10 + ascii - 'A'; |
| } else if (ascii >= 'a' && ascii <= 'f') { |
| return 10 + ascii - 'a'; |
| } |
| throw new NumberFormatException(new Character(ascii).toString()); |
| } |
| } |