1892 } catch(IOException exp) { 1893 return genHTMLErrorMessage(exp); 1894 } 1895 } 1896 1897 protected String genJavaStackTraceTitle(JavaThread thread) { 1898 Formatter buf = new Formatter(genHTML); 1899 buf.append("Java Stack Trace for "); 1900 buf.append(thread.getThreadName()); 1901 return buf.toString(); 1902 } 1903 1904 public String genHTMLForJavaStackTrace(JavaThread thread) { 1905 Formatter buf = new Formatter(genHTML); 1906 buf.genHTMLPrologue(genJavaStackTraceTitle(thread)); 1907 1908 buf.append("Thread state = "); 1909 buf.append(thread.getThreadState().toString()); 1910 buf.br(); 1911 buf.beginTag("pre"); 1912 for (JavaVFrame vf = thread.getLastJavaVFrameDbg(); vf != null; vf = vf.javaSender()) { 1913 Method method = vf.getMethod(); 1914 buf.append(" - "); 1915 buf.append(genMethodLink(method)); 1916 buf.append(" @bci = " + vf.getBCI()); 1917 1918 int lineNumber = method.getLineNumberFromBCI(vf.getBCI()); 1919 if (lineNumber != -1) { 1920 buf.append(", line = "); 1921 buf.append(lineNumber); 1922 } 1923 1924 sun.jvm.hotspot.debugger.Address pc = vf.getFrame().getPC(); 1925 if (pc != null) { 1926 buf.append(", pc = "); 1927 buf.link(genPCHref(addressToLong(pc)), pc.toString()); 1928 } 1929 1930 if (!method.isStatic() && !method.isNative()) { 1931 OopHandle oopHandle = vf.getLocals().oopHandleAt(0); 1932 1933 if (oopHandle != null) { 1934 buf.append(", oop = "); 1935 buf.append(oopHandle.toString()); 1936 } 1937 } 1938 1939 if (vf.isCompiledFrame()) { 1940 buf.append(" (Compiled"); 1941 } 1942 else if (vf.isInterpretedFrame()) { 1943 buf.append(" (Interpreted"); 1944 } 1945 1946 if (vf.mayBeImpreciseDbg()) { 1947 buf.append("; information may be imprecise"); 1948 } 1949 buf.append(")"); 1950 buf.br(); 1951 } 1952 1953 buf.endTag("pre"); 1954 buf.genHTMLEpilogue(); 1955 return buf.toString(); 1956 } 1957 1958 public String genHTMLForHyperlink(String href) { 1959 if (href.startsWith("klass=")) { 1960 href = href.substring(href.indexOf('=') + 1); 1961 Klass k = getKlassAtAddress(href); 1962 if (Assert.ASSERTS_ENABLED) { 1963 Assert.that(k instanceof InstanceKlass, "class= href with improper InstanceKlass!"); 1964 } 1965 return genHTML((InstanceKlass) k); 1966 } else if (href.startsWith("method=")) { 1967 href = href.substring(href.indexOf('=') + 1); 1968 Method obj = getMethodAtAddress(href); 1969 if (Assert.ASSERTS_ENABLED) { 1970 Assert.that(obj instanceof Method, "method= href with improper Method!"); | 1892 } catch(IOException exp) { 1893 return genHTMLErrorMessage(exp); 1894 } 1895 } 1896 1897 protected String genJavaStackTraceTitle(JavaThread thread) { 1898 Formatter buf = new Formatter(genHTML); 1899 buf.append("Java Stack Trace for "); 1900 buf.append(thread.getThreadName()); 1901 return buf.toString(); 1902 } 1903 1904 public String genHTMLForJavaStackTrace(JavaThread thread) { 1905 Formatter buf = new Formatter(genHTML); 1906 buf.genHTMLPrologue(genJavaStackTraceTitle(thread)); 1907 1908 buf.append("Thread state = "); 1909 buf.append(thread.getThreadState().toString()); 1910 buf.br(); 1911 buf.beginTag("pre"); 1912 int count = 0; 1913 for (JavaVFrame vf = thread.getLastJavaVFrameDbg(); vf != null; vf = vf.javaSender()) { 1914 Method method = vf.getMethod(); 1915 buf.append(" - "); 1916 buf.append(genMethodLink(method)); 1917 buf.append(" @bci = " + vf.getBCI()); 1918 1919 int lineNumber = method.getLineNumberFromBCI(vf.getBCI()); 1920 if (lineNumber != -1) { 1921 buf.append(", line = "); 1922 buf.append(lineNumber); 1923 } 1924 1925 sun.jvm.hotspot.debugger.Address pc = vf.getFrame().getPC(); 1926 if (pc != null) { 1927 buf.append(", pc = "); 1928 buf.link(genPCHref(addressToLong(pc)), pc.toString()); 1929 } 1930 1931 if (!method.isStatic() && !method.isNative()) { 1932 OopHandle oopHandle = vf.getLocals().oopHandleAt(0); 1933 1934 if (oopHandle != null) { 1935 buf.append(", oop = "); 1936 buf.append(oopHandle.toString()); 1937 } 1938 } 1939 1940 if (vf.isCompiledFrame()) { 1941 buf.append(" (Compiled"); 1942 } 1943 else if (vf.isInterpretedFrame()) { 1944 buf.append(" (Interpreted"); 1945 } 1946 1947 if (vf.mayBeImpreciseDbg()) { 1948 buf.append("; information may be imprecise"); 1949 } 1950 buf.append(")"); 1951 buf.br(); 1952 1953 ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 1954 PrintStream printStream = new PrintStream(bytes); 1955 try (printStream) { 1956 vf.printLockInfo(printStream, count++); 1957 for (String line : bytes.toString().split("\n")) { 1958 if (genHTML) { 1959 line = line.replace("<", "<").replace(">", ">"); 1960 } 1961 buf.append(line); 1962 buf.br(); 1963 } 1964 } 1965 } 1966 1967 buf.endTag("pre"); 1968 buf.genHTMLEpilogue(); 1969 return buf.toString(); 1970 } 1971 1972 public String genHTMLForHyperlink(String href) { 1973 if (href.startsWith("klass=")) { 1974 href = href.substring(href.indexOf('=') + 1); 1975 Klass k = getKlassAtAddress(href); 1976 if (Assert.ASSERTS_ENABLED) { 1977 Assert.that(k instanceof InstanceKlass, "class= href with improper InstanceKlass!"); 1978 } 1979 return genHTML((InstanceKlass) k); 1980 } else if (href.startsWith("method=")) { 1981 href = href.substring(href.indexOf('=') + 1); 1982 Method obj = getMethodAtAddress(href); 1983 if (Assert.ASSERTS_ENABLED) { 1984 Assert.that(obj instanceof Method, "method= href with improper Method!"); |