📄 debug.java
字号:
toStr = obj.toString();
if (toStr.indexOf('@') > 0)
toStr = " {Stack overflow!}";
} catch (StackOverflowError t) {
toStr = " {Stack overflow!}";
}
dump(prefix, String.valueOf(str) + String.valueOf(toStr));
return;
}
if (obj instanceof Vector) {
dump(prefix, depth, checkCircuit, (Vector) obj);
return;
}
if (obj instanceof Map) {
dump(prefix, depth, checkCircuit, (Map) obj);
return;
}
if (obj instanceof Enumeration) {
dump(prefix, depth, checkCircuit, (Enumeration) obj);
return;
}
if (obj instanceof Object[]) {
dump(prefix, depth, checkCircuit, (Object[]) obj);
return;
}
if (obj instanceof Throwable) {
dump(prefix, (Throwable) obj);
return;
}
if (obj instanceof byte[]) {
dump(prefix, (byte[]) obj);
return;
}
if (obj.getClass().isArray()) {
int len = Array.getLength(obj);
dumpBegin(prefix, checkCircuit, obj);
StringBuffer content = new StringBuffer();
for (int i = 0; i < len; i++) {
content.append(fixLength(Array.get(obj, i).toString(), 4));
if (i % 8 == 7 && i < len - 1)
content.append(String.valueOf(lineSeparator)
+ String.valueOf(indent(prefix)));
}
dump(indent(prefix), content.toString());
dumpEnd(prefix, checkCircuit, obj);
return;
}
if (Class.forName("javax.servlet.ServletRequest").isInstance(obj)) {
dumpServletRequest(prefix, obj);
return;
}
} catch (ClassNotFoundException classnotfoundexception) {
}
dumpBegin(prefix, checkCircuit, obj);
for (Class c = obj.getClass(); c != null; c = c.getSuperclass()) {
Field f[];
try {
f = c.getDeclaredFields();
} catch (SecurityException ex2) {
dump(indent(prefix),
"Can't dump object member for security reason.");
return;
}
for (int i = 0; i < f.length; i++) {
String m = Modifier.toString(f[i].getModifiers());
if (m.indexOf("static") > 0)
continue;
String n = f[i].getName();
Object v = "[unkonwn]";
try {
f[i].setAccessible(true);
} catch (SecurityException securityexception) {
}
try {
v = f[i].get(obj);
if (v != null)
if (v instanceof String)
v = String.valueOf(String
.valueOf((new StringBuffer("\"")).append(v)
.append('"')));
else if (v instanceof Character) {
char cv = ((Character) v).charValue();
if (cv < ' ') {
StringBuffer sbv = new StringBuffer();
sbv.append("\\u");
sbv.append(Integer.toHexString(cv));
for (; sbv.length() < 6; sbv.insert(2, '0'))
;
v = sbv;
}
v = String.valueOf(String
.valueOf((new StringBuffer("'")).append(v)
.append('\'')));
}
} catch (Exception exception) {
}
Class ct = f[i].getType();
String t = formatClassName(ct, v);
dump(String.valueOf(String.valueOf((new StringBuffer(String
.valueOf(String.valueOf(indent(prefix))))).append(
String.valueOf(
String.valueOf((new StringBuffer(String
.valueOf(String.valueOf(m)))).append(
' ').append(t).append(' ').append(n)))
.trim()).append(" = "))), depth, checkCircuit,
v);
}
}
dumpEnd(prefix, checkCircuit, obj);
}
private static void dumpBegin(String prefix, Vector checkCircuit, Object obj) {
String className = formatClassName(obj.getClass(), obj);
int address = System.identityHashCode(obj);
checkCircuit.addElement(new Integer(address));
if (obj instanceof Array)
className = String.valueOf(String.valueOf((new StringBuffer(String
.valueOf(String.valueOf(className.substring(2))))).append(
'[').append(Array.getLength(obj)).append("] ")));
if (className.startsWith("java.lang."))
className = className.substring(10);
if (prefix.trim().endsWith(
"@".concat(String.valueOf(String.valueOf(address)))))
out.println(String.valueOf(String.valueOf(prefix)).concat(" {"));
else
out.println(String.valueOf(String.valueOf((new StringBuffer(String
.valueOf(String.valueOf(prefix)))).append(className)
.append(" @").append(address).append(" {"))));
}
private static void dumpEnd(String prefix, Vector checkCircuit, Object obj) {
checkCircuit.removeElement(new Integer(System.identityHashCode(obj)));
int p = prefix.lastIndexOf(indentString);
if (p > 0)
prefix = String.valueOf(prefix.substring(0, p))
+ String.valueOf(indentString);
int i = 0;
do {
if (i >= prefix.length())
break;
char c = prefix.charAt(i);
if (c != '\t' && c != ' ')
break;
out.print(c);
i++;
} while (true);
out.println("}");
out.flush();
}
public static String locate(String esc) {
StringWriter sw = new StringWriter();
(new Exception()).printStackTrace(new PrintWriter(sw));
StringTokenizer st = new StringTokenizer(sw.toString(), "\n");
do {
if (!st.hasMoreTokens())
break;
String str = st.nextToken();
if (str.indexOf("Exception") != -1
|| str.indexOf((com.huawei.insa2.util.Debug.class)
.getName()) != -1 || esc != null
&& str.indexOf(esc) != -1)
continue;
if (esc == "!@*#~^?'/\"")
return str;
int i = str.indexOf('(');
int j = str.indexOf(')');
if (i != -1 && j != -1)
return str.substring(i, j + 1);
break;
} while (true);
return "";
}
private static void setHex(byte src[], int lowByte, int value) {
int i = 0;
do {
if (i >= 8)
break;
src[lowByte - i] = hexNumber[value & 0xf];
value >>>= 4;
if (value == 0)
break;
i++;
} while (true);
}
private static String indent(String prefix) {
int p = prefix.lastIndexOf(indentString);
if (p > 0)
prefix = String.valueOf(prefix.substring(0, p))
+ String.valueOf(indentString);
StringBuffer sb = new StringBuffer();
int i = 0;
do {
if (i >= prefix.length())
break;
char c = prefix.charAt(i);
if (c != '\t' && c != ' ')
break;
sb.append(c);
i++;
} while (true);
sb.append(indentString);
return sb.toString();
}
private static String formatClassName(Class c, Object obj) {
String t = c.getName();
if (t.charAt(t.length() - 1) == ';')
t = t.substring(0, t.length() - 1);
boolean isArray = false;
boolean firstDimension = true;
while (t.startsWith("[")) {
isArray = true;
if (firstDimension && obj != null) {
t = String.valueOf(String.valueOf((new StringBuffer(String
.valueOf(String.valueOf(t.substring(1))))).append('[')
.append(Array.getLength(obj)).append(']')));
firstDimension = false;
} else {
t = String.valueOf(String.valueOf(t.substring(1))).concat("[]");
}
}
if (isArray) {
char ch = t.charAt(0);
t = t.substring(1);
switch (ch) {
case 66: // 'B'
t = "byte".concat(String.valueOf(String.valueOf(t)));
break;
case 67: // 'C'
t = "char".concat(String.valueOf(String.valueOf(t)));
break;
case 70: // 'F'
t = "float".concat(String.valueOf(String.valueOf(t)));
break;
case 73: // 'I'
t = "int".concat(String.valueOf(String.valueOf(t)));
break;
case 74: // 'J'
t = "long".concat(String.valueOf(String.valueOf(t)));
break;
case 83: // 'S'
t = "short".concat(String.valueOf(String.valueOf(t)));
break;
case 90: // 'Z'
t = "boolean".concat(String.valueOf(String.valueOf(t)));
break;
}
}
if (t.startsWith("java.lang."))
t = t.substring(10);
else if (t.startsWith("class "))
t = t.substring(7);
return t;
}
private static String fixLength(String str, int len) {
StringBuffer sb = new StringBuffer(len);
sb.append(str);
int n = len - str.length() % len;
for (int i = 0; i < n; i++)
sb.append(' ');
return sb.toString();
}
private static String dumpHead() {
StringBuffer sb = new StringBuffer();
sb.append(sdf.format(new Date()));
sb.append(locate(null));
sb.append(' ');
return sb.toString();
}
private static int getDepth(String prefix) {
int count = 0;
int indentLen = indentString.length();
int i = -indentLen;
do {
count++;
i = prefix.indexOf(indentString, i + indentLen);
} while (i >= 0);
return count;
}
private static String indentString = " ";
private static final String lineSeparator = System
.getProperty("line.separator");
public static PrintWriter out;
private static final byte hexNumber[] = { 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 97, 98, 99, 100, 101, 102 };
private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
public static final String fullInfo = "!@*#~^?'/\"";
static {
out = new PrintWriter(System.out);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -