natthrowable.cc
来自「gcc3.2.1源代码」· CC 代码 · 共 105 行
CC
105 行
// natThrowable.cc - Superclass for all exceptions./* Copyright (C) 2000 Free Software Foundation, Inc This file is part of libgcj.This software is copyrighted work licensed under the terms of theLibgcj License. Please consult the file "LIBGCJ_LICENSE" fordetails. *//** * @author Andrew Haley <aph@cygnus.com> * @date Jan 6 2000 */#include <config.h>#include <string.h>#include <gcj/cni.h>#include <jvm.h>#include <java/lang/Object.h>#include <java-threads.h>#include <java/lang/Throwable.h>#include <java/io/PrintStream.h>#include <java/io/PrintWriter.h>#include <java/io/IOException.h>#include <sys/types.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#ifdef HAVE_EXECINFO_H#include <execinfo.h>#endif#include <name-finder.h>/* FIXME: size of the stack trace is limited to 128 elements. It's undoubtedly sensible to limit the stack trace, but 128 is rather arbitrary. It may be better to configure this. */java::lang::Throwable *java::lang::Throwable::fillInStackTrace (void){ if (! trace_enabled) return this;#if defined (HAVE_BACKTRACE) void *p[128]; // We subtract 1 from the number of elements because we don't want // to include the call to fillInStackTrace in the trace. int n = backtrace (p, 128) - 1; if (n > 0) { // We copy the array below to deal with alignment issues. stackTrace = JvNewByteArray (n * sizeof p[0]); memcpy (elements (stackTrace), p+1, (n * sizeof p[0])); }#endif return this;}void java::lang::Throwable::printRawStackTrace (java::io::PrintWriter *wr){ wr->println (toString ());#ifdef HAVE_BACKTRACE if (!stackTrace) return; int depth = stackTrace->length / sizeof (void *); void *p[depth]; memcpy (p, elements (stackTrace), sizeof p); _Jv_name_finder finder (_Jv_ThisExecutable ()); for (int i = 0; i < depth; i++) { bool found = finder.lookup (p[i]); wr->print (JvNewStringLatin1 (" at ")); wr->print (JvNewStringLatin1 (finder.hex)); if (found) { wr->print (JvNewStringLatin1 (": ")); wr->print (JvNewStringLatin1 (finder.method_name)); if (finder.file_name[0]) { wr->print (JvNewStringLatin1 (" (")); wr->print (JvNewStringLatin1 (finder.file_name)); wr->print (JvNewStringLatin1 (")")); } } wr->println (); }#endif /* HAVE_BACKTRACE */ wr->flush ();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?