View Javadoc
1   /*
2    * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  
26  /*
27   * This source code is provided to illustrate the usage of a given feature
28   * or technique and has been deliberately simplified. Additional steps
29   * required for a production-quality application, such as security checks,
30   * input validation and proper error handling, might not be present in
31   * this sample code.
32   */
33  
34  
35  package com.sun.tools.example.debug.event;
36  
37  import com.sun.jdi.*;
38  import com.sun.jdi.event.*;
39  
40  public class ExceptionEventSet extends LocatableEventSet {
41  
42      private static final long serialVersionUID = 5328140167954640711L;
43  
44      ExceptionEventSet(EventSet jdiEventSet) {
45          super(jdiEventSet);
46      }
47  
48      /**
49       * Gets the thrown exception object. The exception object is
50       * an instance of java.lang.Throwable or a subclass in the
51       * target VM.
52       *
53       * @return an {@link ObjectReference} which mirrors the thrown object in
54       * the target VM.
55       */
56      public ObjectReference getException() {
57          return ((ExceptionEvent)oneEvent).exception();
58      }
59  
60      /**
61       * Gets the location where the exception will be caught. An exception
62       * is considered to be caught if, at the point of the throw, the
63       * current location is dynamically enclosed in a try statement that
64       * handles the exception. (See the JVM specification for details).
65       * If there is such a try statement, the catch location is the
66       * first code index of the appropriate catch clause.
67       * <p>
68       * If there are native methods in the call stack at the time of the
69       * exception, there are important restrictions to note about the
70       * returned catch location. In such cases,
71       * it is not possible to predict whether an exception will be handled
72       * by some native method on the call stack.
73       * Thus, it is possible that exceptions considered uncaught
74       * here will, in fact, be handled by a native method and not cause
75       * termination of the target VM. Also, it cannot be assumed that the
76       * catch location returned here will ever be reached by the throwing
77       * thread. If there is
78       * a native frame between the current location and the catch location,
79       * the exception might be handled and cleared in that native method
80       * instead.
81       *
82       * @return the {@link Location} where the exception will be caught or null if
83       * the exception is uncaught.
84       */
85      public Location getCatchLocation() {
86          return ((ExceptionEvent)oneEvent).catchLocation();
87      }
88  
89      @Override
90      public void notify(JDIListener listener) {
91          listener.exception(this);
92      }
93  }