2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package gov.nasa.jpf.vm;
20 import gov.nasa.jpf.util.Printable;
22 import java.io.PrintWriter;
26 * represents the case of an unhandled exception detected by JPF
28 * This is a "controlflow exception", but I finally made my peace with it since
29 * UncaughtExceptions can be thrown from various places, including the VM (<clinit>, finalizer)
30 * and we can't rely on that all these locations can check for pc == null. Even if they would,
31 * at this point there is nothing to do anymore, get to the NoUncaughtProperty reporting
32 * as quickly as possible, since chances are we would be even obfuscating the problem
34 @SuppressWarnings("serial")
35 public class UncaughtException extends RuntimeException implements Printable {
38 int xObjRef; // the exception object reference (that went uncaught)
43 //ArrayList stackTrace; // unused -pcd
45 public UncaughtException (ThreadInfo ti, int objRef) {
49 ElementInfo ei = ti.getElementInfo(xObjRef);
50 xClsName = ei.getClassInfo().getName();
51 details = ei.getStringField("detailMessage");
54 public String getRawMessage () {
59 public String getMessage () {
60 String s = "uncaught exception in thread " + thread.getName() +
61 " #" + thread.getId() + " : "
64 if (details != null) {
65 s += " : \"" + details + "\"";
72 public void printOn (PrintWriter pw) {
73 pw.print("uncaught exception in thread ");
74 pw.print( thread.getName());
76 pw.print(thread.getId());
79 thread.printStackTrace(pw, xObjRef);