public final class com.oracle.truffle.api.debug.Debugger
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.api.debug.Debugger
  super_class: java.lang.Object
{
  static final boolean TRACE;
    descriptor: Z
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  private final com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env;
    descriptor: Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  final java.util.List<java.lang.Object> propSupport;
    descriptor: Ljava/util/List;
    flags: (0x0010) ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/Object;>;

  private final java.util.List<java.util.function.Consumer<com.oracle.truffle.api.debug.Breakpoint>> breakpointAddedListeners;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;>;

  private final java.util.List<java.util.function.Consumer<com.oracle.truffle.api.debug.Breakpoint>> breakpointRemovedListeners;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;>;

  private final java.util.Set<com.oracle.truffle.api.debug.DebuggerSession> sessions;
    descriptor: Ljava/util/Set;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Set<Lcom/oracle/truffle/api/debug/DebuggerSession;>;

  private final java.util.List<com.oracle.truffle.api.debug.Breakpoint> breakpoints;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Lcom/oracle/truffle/api/debug/Breakpoint;>;

  final com.oracle.truffle.api.debug.Breakpoint alwaysHaltBreakpoint;
    descriptor: Lcom/oracle/truffle/api/debug/Breakpoint;
    flags: (0x0010) ACC_FINAL

  static final com.oracle.truffle.api.debug.Debugger$AccessorDebug ACCESSOR;
    descriptor: Lcom/oracle/truffle/api/debug/Debugger$AccessorDebug;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 92
            ldc "truffle.debug.trace"
            invokestatic java.lang.Boolean.getBoolean:(Ljava/lang/String;)Z
            putstatic com.oracle.truffle.api.debug.Debugger.TRACE:Z
         1: .line 371
            new com.oracle.truffle.api.debug.Debugger$AccessorDebug
            dup
            invokespecial com.oracle.truffle.api.debug.Debugger$AccessorDebug.<init>:()V
            putstatic com.oracle.truffle.api.debug.Debugger.ACCESSOR:Lcom/oracle/truffle/api/debug/Debugger$AccessorDebug;
         2: .line 374
            new com.oracle.truffle.api.debug.Debugger$1
            dup
            invokespecial com.oracle.truffle.api.debug.Debugger$1.<init>:()V
            invokestatic com.oracle.truffle.api.debug.impl.DebuggerInstrument.setFactory:(Lcom/oracle/truffle/api/debug/impl/DebuggerInstrument$DebuggerFactory;)V
         3: .line 379
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.oracle.truffle.api.instrumentation.TruffleInstrument$Env);
    descriptor: (Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
         0: .line 102
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 95
            aload 0 /* this */
            new java.util.concurrent.CopyOnWriteArrayList
            dup
            invokespecial java.util.concurrent.CopyOnWriteArrayList.<init>:()V
            putfield com.oracle.truffle.api.debug.Debugger.propSupport:Ljava/util/List;
         2: .line 96
            aload 0 /* this */
            new java.util.concurrent.CopyOnWriteArrayList
            dup
            invokespecial java.util.concurrent.CopyOnWriteArrayList.<init>:()V
            putfield com.oracle.truffle.api.debug.Debugger.breakpointAddedListeners:Ljava/util/List;
         3: .line 97
            aload 0 /* this */
            new java.util.concurrent.CopyOnWriteArrayList
            dup
            invokespecial java.util.concurrent.CopyOnWriteArrayList.<init>:()V
            putfield com.oracle.truffle.api.debug.Debugger.breakpointRemovedListeners:Ljava/util/List;
         4: .line 98
            aload 0 /* this */
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putfield com.oracle.truffle.api.debug.Debugger.sessions:Ljava/util/Set;
         5: .line 99
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
         6: .line 103
            aload 0 /* this */
            aload 1 /* env */
            putfield com.oracle.truffle.api.debug.Debugger.env:Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
         7: .line 104
            aload 0 /* this */
            new com.oracle.truffle.api.debug.Breakpoint
            dup
            getstatic com.oracle.truffle.api.debug.BreakpointLocation.ANY:Lcom/oracle/truffle/api/debug/BreakpointLocation;
            getstatic com.oracle.truffle.api.debug.SuspendAnchor.BEFORE:Lcom/oracle/truffle/api/debug/SuspendAnchor;
            invokespecial com.oracle.truffle.api.debug.Breakpoint.<init>:(Lcom/oracle/truffle/api/debug/BreakpointLocation;Lcom/oracle/truffle/api/debug/SuspendAnchor;)V
            putfield com.oracle.truffle.api.debug.Debugger.alwaysHaltBreakpoint:Lcom/oracle/truffle/api/debug/Breakpoint;
         8: .line 105
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.alwaysHaltBreakpoint:Lcom/oracle/truffle/api/debug/Breakpoint;
            iconst_1
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.setEnabled:(Z)V
         9: .line 106
            return
        end local 1 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lcom/oracle/truffle/api/debug/Debugger;
            0   10     1   env  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
    MethodParameters:
      Name  Flags
      env   

  public com.oracle.truffle.api.debug.DebuggerSession startSession(com.oracle.truffle.api.debug.SuspendedCallback);
    descriptor: (Lcom/oracle/truffle/api/debug/SuspendedCallback;)Lcom/oracle/truffle/api/debug/DebuggerSession;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // com.oracle.truffle.api.debug.SuspendedCallback callback
         0: .line 122
            aload 0 /* this */
            aload 1 /* callback */
            iconst_1
            anewarray com.oracle.truffle.api.debug.SourceElement
            dup
            iconst_0
            getstatic com.oracle.truffle.api.debug.SourceElement.STATEMENT:Lcom/oracle/truffle/api/debug/SourceElement;
            aastore
            invokevirtual com.oracle.truffle.api.debug.Debugger.startSession:(Lcom/oracle/truffle/api/debug/SuspendedCallback;[Lcom/oracle/truffle/api/debug/SourceElement;)Lcom/oracle/truffle/api/debug/DebuggerSession;
            areturn
        end local 1 // com.oracle.truffle.api.debug.SuspendedCallback callback
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/oracle/truffle/api/debug/Debugger;
            0    1     1  callback  Lcom/oracle/truffle/api/debug/SuspendedCallback;
    MethodParameters:
          Name  Flags
      callback  

  public com.oracle.truffle.api.debug.DebuggerSession startSession(com.oracle.truffle.api.debug.SuspendedCallback, com.oracle.truffle.api.debug.SourceElement[]);
    descriptor: (Lcom/oracle/truffle/api/debug/SuspendedCallback;[Lcom/oracle/truffle/api/debug/SourceElement;)Lcom/oracle/truffle/api/debug/DebuggerSession;
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=5, locals=9, args_size=3
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // com.oracle.truffle.api.debug.SuspendedCallback callback
        start local 2 // com.oracle.truffle.api.debug.SourceElement[] defaultSourceElements
         0: .line 141
            new com.oracle.truffle.api.debug.DebuggerSession
            dup
            aload 0 /* this */
            aload 1 /* callback */
            aload 2 /* defaultSourceElements */
            invokespecial com.oracle.truffle.api.debug.DebuggerSession.<init>:(Lcom/oracle/truffle/api/debug/Debugger;Lcom/oracle/truffle/api/debug/SuspendedCallback;[Lcom/oracle/truffle/api/debug/SourceElement;)V
            astore 3 /* session */
        start local 3 // com.oracle.truffle.api.debug.DebuggerSession session
         1: .line 143
            aload 0 /* this */
            dup
            astore 5
            monitorenter
         2: .line 144
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.sessions:Ljava/util/Set;
            aload 3 /* session */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         3: .line 145
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            iconst_0
            anewarray com.oracle.truffle.api.debug.Breakpoint
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Breakpoint[]
            astore 4 /* bpts */
        start local 4 // com.oracle.truffle.api.debug.Breakpoint[] bpts
         4: .line 143
            aload 5
            monitorexit
         5: goto 8
        end local 4 // com.oracle.truffle.api.debug.Breakpoint[] bpts
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.SuspendedCallback com.oracle.truffle.api.debug.SourceElement[] com.oracle.truffle.api.debug.DebuggerSession top com.oracle.truffle.api.debug.Debugger
      StackMap stack: java.lang.Throwable
         6: aload 5
            monitorexit
         7: athrow
        start local 4 // com.oracle.truffle.api.debug.Breakpoint[] bpts
         8: .line 147
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.SuspendedCallback com.oracle.truffle.api.debug.SourceElement[] com.oracle.truffle.api.debug.DebuggerSession com.oracle.truffle.api.debug.Breakpoint[]
      StackMap stack:
            aload 4 /* bpts */
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 12
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.SuspendedCallback com.oracle.truffle.api.debug.SourceElement[] com.oracle.truffle.api.debug.DebuggerSession com.oracle.truffle.api.debug.Breakpoint[] top int int com.oracle.truffle.api.debug.Breakpoint[]
      StackMap stack:
         9: aload 8
            iload 6
            aaload
            astore 5 /* b */
        start local 5 // com.oracle.truffle.api.debug.Breakpoint b
        10: .line 148
            aload 3 /* session */
            aload 5 /* b */
            iconst_1
            invokevirtual com.oracle.truffle.api.debug.DebuggerSession.install:(Lcom/oracle/truffle/api/debug/Breakpoint;Z)V
        end local 5 // com.oracle.truffle.api.debug.Breakpoint b
        11: .line 147
            iinc 6 1
      StackMap locals:
      StackMap stack:
        12: iload 6
            iload 7
            if_icmplt 9
        13: .line 150
            aload 3 /* session */
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.alwaysHaltBreakpoint:Lcom/oracle/truffle/api/debug/Breakpoint;
            iconst_1
            invokevirtual com.oracle.truffle.api.debug.DebuggerSession.install:(Lcom/oracle/truffle/api/debug/Breakpoint;Z)V
        14: .line 151
            aload 3 /* session */
            areturn
        end local 4 // com.oracle.truffle.api.debug.Breakpoint[] bpts
        end local 3 // com.oracle.truffle.api.debug.DebuggerSession session
        end local 2 // com.oracle.truffle.api.debug.SourceElement[] defaultSourceElements
        end local 1 // com.oracle.truffle.api.debug.SuspendedCallback callback
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   15     0                   this  Lcom/oracle/truffle/api/debug/Debugger;
            0   15     1               callback  Lcom/oracle/truffle/api/debug/SuspendedCallback;
            0   15     2  defaultSourceElements  [Lcom/oracle/truffle/api/debug/SourceElement;
            1   15     3                session  Lcom/oracle/truffle/api/debug/DebuggerSession;
            4    6     4                   bpts  [Lcom/oracle/truffle/api/debug/Breakpoint;
            8   15     4                   bpts  [Lcom/oracle/truffle/api/debug/Breakpoint;
           10   11     5                      b  Lcom/oracle/truffle/api/debug/Breakpoint;
      Exception table:
        from    to  target  type
           2     5       6  any
           6     7       6  any
    MethodParameters:
                       Name  Flags
      callback               
      defaultSourceElements  

  public synchronized int getSessionCount();
    descriptor: ()I
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.debug.Debugger this
         0: .line 161
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.sessions:Ljava/util/Set;
            invokeinterface java.util.Set.size:()I
            ireturn
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/api/debug/Debugger;

  void disposedSession(com.oracle.truffle.api.debug.DebuggerSession);
    descriptor: (Lcom/oracle/truffle/api/debug/DebuggerSession;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=5, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // com.oracle.truffle.api.debug.DebuggerSession session
         0: .line 165
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         1: .line 166
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.sessions:Ljava/util/Set;
            aload 1 /* session */
            invokeinterface java.util.Set.remove:(Ljava/lang/Object;)Z
            pop
         2: .line 167
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 5
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.DebuggerSession com.oracle.truffle.api.debug.Debugger top java.util.Iterator
      StackMap stack:
         3: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Breakpoint
            astore 3 /* b */
        start local 3 // com.oracle.truffle.api.debug.Breakpoint b
         4: .line 168
            aload 3 /* b */
            aload 1 /* session */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.sessionClosed:(Lcom/oracle/truffle/api/debug/DebuggerSession;)V
        end local 3 // com.oracle.truffle.api.debug.Breakpoint b
         5: .line 167
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 170
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.alwaysHaltBreakpoint:Lcom/oracle/truffle/api/debug/Breakpoint;
            aload 1 /* session */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.sessionClosed:(Lcom/oracle/truffle/api/debug/DebuggerSession;)V
         7: .line 165
            aload 2
            monitorexit
         8: goto 11
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.DebuggerSession com.oracle.truffle.api.debug.Debugger
      StackMap stack: java.lang.Throwable
         9: aload 2
            monitorexit
        10: athrow
        11: .line 172
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.oracle.truffle.api.debug.DebuggerSession session
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   12     0     this  Lcom/oracle/truffle/api/debug/Debugger;
            0   12     1  session  Lcom/oracle/truffle/api/debug/DebuggerSession;
            4    5     3        b  Lcom/oracle/truffle/api/debug/Breakpoint;
      Exception table:
        from    to  target  type
           1     8       9  any
           9    10       9  any
    MethodParameters:
         Name  Flags
      session  

  public com.oracle.truffle.api.debug.Breakpoint install(com.oracle.truffle.api.debug.Breakpoint);
    descriptor: (Lcom/oracle/truffle/api/debug/Breakpoint;)Lcom/oracle/truffle/api/debug/Breakpoint;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // com.oracle.truffle.api.debug.Breakpoint breakpoint
         0: .line 189
            aload 1 /* breakpoint */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.isDisposed:()Z
            ifeq 2
         1: .line 190
            new java.lang.IllegalArgumentException
            dup
            ldc "Cannot install breakpoint, it is already disposed."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 192
      StackMap locals:
      StackMap stack:
            aload 1 /* breakpoint */
            aload 0 /* this */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.installGlobal:(Lcom/oracle/truffle/api/debug/Debugger;)V
         3: .line 194
            aload 0 /* this */
            dup
            astore 3
            monitorenter
         4: .line 195
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            aload 1 /* breakpoint */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         5: .line 196
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.sessions:Ljava/util/Set;
            iconst_0
            anewarray com.oracle.truffle.api.debug.DebuggerSession
            invokeinterface java.util.Set.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.DebuggerSession[]
            astore 2 /* ds */
        start local 2 // com.oracle.truffle.api.debug.DebuggerSession[] ds
         6: .line 194
            aload 3
            monitorexit
         7: goto 10
        end local 2 // com.oracle.truffle.api.debug.DebuggerSession[] ds
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint top com.oracle.truffle.api.debug.Debugger
      StackMap stack: java.lang.Throwable
         8: aload 3
            monitorexit
         9: athrow
        start local 2 // com.oracle.truffle.api.debug.DebuggerSession[] ds
        10: .line 198
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint com.oracle.truffle.api.debug.DebuggerSession[]
      StackMap stack:
            aload 2 /* ds */
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 14
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint com.oracle.truffle.api.debug.DebuggerSession[] top int int com.oracle.truffle.api.debug.DebuggerSession[]
      StackMap stack:
        11: aload 6
            iload 4
            aaload
            astore 3 /* s */
        start local 3 // com.oracle.truffle.api.debug.DebuggerSession s
        12: .line 199
            aload 3 /* s */
            aload 1 /* breakpoint */
            iconst_1
            invokevirtual com.oracle.truffle.api.debug.DebuggerSession.install:(Lcom/oracle/truffle/api/debug/Breakpoint;Z)V
        end local 3 // com.oracle.truffle.api.debug.DebuggerSession s
        13: .line 198
            iinc 4 1
      StackMap locals:
      StackMap stack:
        14: iload 4
            iload 5
            if_icmplt 11
        15: .line 201
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpointAddedListeners:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 18
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint com.oracle.truffle.api.debug.DebuggerSession[] top java.util.Iterator
      StackMap stack:
        16: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.function.Consumer
            astore 3 /* listener */
        start local 3 // java.util.function.Consumer listener
        17: .line 202
            aload 3 /* listener */
            aload 1 /* breakpoint */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.getROWrapper:()Lcom/oracle/truffle/api/debug/Breakpoint;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 3 // java.util.function.Consumer listener
        18: .line 201
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 16
        19: .line 204
            getstatic com.oracle.truffle.api.debug.Debugger.TRACE:Z
            ifeq 21
        20: .line 205
            ldc "installed debugger breakpoint %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* breakpoint */
            aastore
            invokestatic com.oracle.truffle.api.debug.Debugger.trace:(Ljava/lang/String;[Ljava/lang/Object;)V
        21: .line 207
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint com.oracle.truffle.api.debug.DebuggerSession[]
      StackMap stack:
            aload 1 /* breakpoint */
            areturn
        end local 2 // com.oracle.truffle.api.debug.DebuggerSession[] ds
        end local 1 // com.oracle.truffle.api.debug.Breakpoint breakpoint
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   22     0        this  Lcom/oracle/truffle/api/debug/Debugger;
            0   22     1  breakpoint  Lcom/oracle/truffle/api/debug/Breakpoint;
            6    8     2          ds  [Lcom/oracle/truffle/api/debug/DebuggerSession;
           10   22     2          ds  [Lcom/oracle/truffle/api/debug/DebuggerSession;
           12   13     3           s  Lcom/oracle/truffle/api/debug/DebuggerSession;
           17   18     3    listener  Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;
      Exception table:
        from    to  target  type
           4     7       8  any
           8     9       8  any
    MethodParameters:
            Name  Flags
      breakpoint  

  public java.util.List<com.oracle.truffle.api.debug.Breakpoint> getBreakpoints();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=1
        start local 0 // com.oracle.truffle.api.debug.Debugger this
         0: .line 227
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         1: .line 228
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 1 /* bpts */
        start local 1 // java.util.List bpts
         2: .line 229
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 5
      StackMap locals: com.oracle.truffle.api.debug.Debugger java.util.List com.oracle.truffle.api.debug.Debugger top java.util.Iterator
      StackMap stack:
         3: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Breakpoint
            astore 3 /* b */
        start local 3 // com.oracle.truffle.api.debug.Breakpoint b
         4: .line 230
            aload 1 /* bpts */
            aload 3 /* b */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.getROWrapper:()Lcom/oracle/truffle/api/debug/Breakpoint;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // com.oracle.truffle.api.debug.Breakpoint b
         5: .line 229
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 227
            aload 2
            monitorexit
         7: goto 10
        end local 1 // java.util.List bpts
      StackMap locals: com.oracle.truffle.api.debug.Debugger top com.oracle.truffle.api.debug.Debugger
      StackMap stack: java.lang.Throwable
         8: aload 2
            monitorexit
         9: athrow
        start local 1 // java.util.List bpts
        10: .line 233
      StackMap locals: com.oracle.truffle.api.debug.Debugger java.util.List
      StackMap stack:
            aload 1 /* bpts */
            invokestatic java.util.Collections.unmodifiableList:(Ljava/util/List;)Ljava/util/List;
            areturn
        end local 1 // java.util.List bpts
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Lcom/oracle/truffle/api/debug/Debugger;
            2    8     1  bpts  Ljava/util/List<Lcom/oracle/truffle/api/debug/Breakpoint;>;
           10   11     1  bpts  Ljava/util/List<Lcom/oracle/truffle/api/debug/Breakpoint;>;
            4    5     3     b  Lcom/oracle/truffle/api/debug/Breakpoint;
      Exception table:
        from    to  target  type
           1     7       8  any
           8     9       8  any
    Signature: ()Ljava/util/List<Lcom/oracle/truffle/api/debug/Breakpoint;>;

  java.util.List<com.oracle.truffle.api.debug.Breakpoint> getRawBreakpoints();
    descriptor: ()Ljava/util/List;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.debug.Debugger this
         0: .line 240
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            areturn
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/api/debug/Debugger;
    Signature: ()Ljava/util/List<Lcom/oracle/truffle/api/debug/Breakpoint;>;

  void disposeBreakpoint(com.oracle.truffle.api.debug.Breakpoint);
    descriptor: (Lcom/oracle/truffle/api/debug/Breakpoint;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // com.oracle.truffle.api.debug.Breakpoint breakpoint
         0: .line 245
            aload 0 /* this */
            dup
            astore 3
            monitorenter
         1: .line 246
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpoints:Ljava/util/List;
            aload 1 /* breakpoint */
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            istore 2 /* removed */
        start local 2 // boolean removed
         2: .line 245
            aload 3
            monitorexit
         3: goto 6
        end local 2 // boolean removed
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint top com.oracle.truffle.api.debug.Debugger
      StackMap stack: java.lang.Throwable
         4: aload 3
            monitorexit
         5: athrow
        start local 2 // boolean removed
         6: .line 248
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint int
      StackMap stack:
            iload 2 /* removed */
            ifeq 11
         7: .line 249
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpointRemovedListeners:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 10
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint int top java.util.Iterator
      StackMap stack:
         8: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.function.Consumer
            astore 3 /* listener */
        start local 3 // java.util.function.Consumer listener
         9: .line 250
            aload 3 /* listener */
            aload 1 /* breakpoint */
            invokevirtual com.oracle.truffle.api.debug.Breakpoint.getROWrapper:()Lcom/oracle/truffle/api/debug/Breakpoint;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 3 // java.util.function.Consumer listener
        10: .line 249
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        11: .line 253
      StackMap locals: com.oracle.truffle.api.debug.Debugger com.oracle.truffle.api.debug.Breakpoint int
      StackMap stack:
            getstatic com.oracle.truffle.api.debug.Debugger.TRACE:Z
            ifeq 13
        12: .line 254
            ldc "disposed debugger breakpoint %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* breakpoint */
            aastore
            invokestatic com.oracle.truffle.api.debug.Debugger.trace:(Ljava/lang/String;[Ljava/lang/Object;)V
        13: .line 256
      StackMap locals:
      StackMap stack:
            return
        end local 2 // boolean removed
        end local 1 // com.oracle.truffle.api.debug.Breakpoint breakpoint
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lcom/oracle/truffle/api/debug/Debugger;
            0   14     1  breakpoint  Lcom/oracle/truffle/api/debug/Breakpoint;
            2    4     2     removed  Z
            6   14     2     removed  Z
            9   10     3    listener  Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    MethodParameters:
            Name  Flags
      breakpoint  

  public void addBreakpointAddedListener(java.util.function.Consumer<com.oracle.truffle.api.debug.Breakpoint>);
    descriptor: (Ljava/util/function/Consumer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // java.util.function.Consumer listener
         0: .line 266
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpointAddedListeners:Ljava/util/List;
            aload 1 /* listener */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         1: .line 267
            return
        end local 1 // java.util.function.Consumer listener
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lcom/oracle/truffle/api/debug/Debugger;
            0    2     1  listener  Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;
    Signature: (Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;)V
    MethodParameters:
          Name  Flags
      listener  

  public void removeBreakpointAddedListener(java.util.function.Consumer<com.oracle.truffle.api.debug.Breakpoint>);
    descriptor: (Ljava/util/function/Consumer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // java.util.function.Consumer listener
         0: .line 275
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpointAddedListeners:Ljava/util/List;
            aload 1 /* listener */
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            pop
         1: .line 276
            return
        end local 1 // java.util.function.Consumer listener
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lcom/oracle/truffle/api/debug/Debugger;
            0    2     1  listener  Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;
    Signature: (Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;)V
    MethodParameters:
          Name  Flags
      listener  

  public void addBreakpointRemovedListener(java.util.function.Consumer<com.oracle.truffle.api.debug.Breakpoint>);
    descriptor: (Ljava/util/function/Consumer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // java.util.function.Consumer listener
         0: .line 286
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpointRemovedListeners:Ljava/util/List;
            aload 1 /* listener */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         1: .line 287
            return
        end local 1 // java.util.function.Consumer listener
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lcom/oracle/truffle/api/debug/Debugger;
            0    2     1  listener  Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;
    Signature: (Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;)V
    MethodParameters:
          Name  Flags
      listener  

  public void removeBreakpointRemovedListener(java.util.function.Consumer<com.oracle.truffle.api.debug.Breakpoint>);
    descriptor: (Ljava/util/function/Consumer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.debug.Debugger this
        start local 1 // java.util.function.Consumer listener
         0: .line 295
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.breakpointRemovedListeners:Ljava/util/List;
            aload 1 /* listener */
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            pop
         1: .line 296
            return
        end local 1 // java.util.function.Consumer listener
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lcom/oracle/truffle/api/debug/Debugger;
            0    2     1  listener  Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;
    Signature: (Ljava/util/function/Consumer<Lcom/oracle/truffle/api/debug/Breakpoint;>;)V
    MethodParameters:
          Name  Flags
      listener  

  com.oracle.truffle.api.instrumentation.TruffleInstrument$Env getEnv();
    descriptor: ()Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.debug.Debugger this
         0: .line 299
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.env:Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
            areturn
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/api/debug/Debugger;

  com.oracle.truffle.api.instrumentation.Instrumenter getInstrumenter();
    descriptor: ()Lcom/oracle/truffle/api/instrumentation/Instrumenter;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.debug.Debugger this
         0: .line 303
            aload 0 /* this */
            getfield com.oracle.truffle.api.debug.Debugger.env:Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
            invokevirtual com.oracle.truffle.api.instrumentation.TruffleInstrument$Env.getInstrumenter:()Lcom/oracle/truffle/api/instrumentation/Instrumenter;
            areturn
        end local 0 // com.oracle.truffle.api.debug.Debugger this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/api/debug/Debugger;

  static void trace(java.lang.String, java.lang.Object[]);
    descriptor: (Ljava/lang/String;[Ljava/lang/Object;)V
    flags: (0x0088) ACC_STATIC, ACC_VARARGS
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.lang.String message
        start local 1 // java.lang.Object[] parameters
         0: .line 307
            getstatic com.oracle.truffle.api.debug.Debugger.TRACE:Z
            ifeq 3
         1: .line 308
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            astore 2 /* out */
        start local 2 // java.io.PrintStream out
         2: .line 309
            aload 2 /* out */
            new java.lang.StringBuilder
            dup
            ldc "Debugger: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* message */
            aload 1 /* parameters */
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        end local 2 // java.io.PrintStream out
         3: .line 311
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object[] parameters
        end local 0 // java.lang.String message
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0     message  Ljava/lang/String;
            0    4     1  parameters  [Ljava/lang/Object;
            2    3     2         out  Ljava/io/PrintStream;
    MethodParameters:
            Name  Flags
      message     
      parameters  

  public static com.oracle.truffle.api.debug.Debugger find(com.oracle.truffle.api.instrumentation.TruffleInstrument$Env);
    descriptor: (Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;)Lcom/oracle/truffle/api/debug/Debugger;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
         0: .line 321
            aload 0 /* env */
            aload 0 /* env */
            invokevirtual com.oracle.truffle.api.instrumentation.TruffleInstrument$Env.getInstruments:()Ljava/util/Map;
            ldc "debugger"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.InstrumentInfo
            ldc Lcom/oracle/truffle/api/debug/Debugger;
            invokevirtual com.oracle.truffle.api.instrumentation.TruffleInstrument$Env.lookup:(Lcom/oracle/truffle/api/InstrumentInfo;Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Debugger
            areturn
        end local 0 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   env  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
    MethodParameters:
      Name  Flags
      env   

  public static com.oracle.truffle.api.debug.Debugger find(org.graalvm.polyglot.Engine);
    descriptor: (Lorg/graalvm/polyglot/Engine;)Lcom/oracle/truffle/api/debug/Debugger;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.graalvm.polyglot.Engine engine
         0: .line 332
            aload 0 /* engine */
            invokevirtual org.graalvm.polyglot.Engine.getInstruments:()Ljava/util/Map;
            ldc "debugger"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.polyglot.Instrument
            ldc Lcom/oracle/truffle/api/debug/Debugger;
            invokevirtual org.graalvm.polyglot.Instrument.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Debugger
            areturn
        end local 0 // org.graalvm.polyglot.Engine engine
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  engine  Lorg/graalvm/polyglot/Engine;
    MethodParameters:
        Name  Flags
      engine  

  public static com.oracle.truffle.api.debug.Debugger find(com.oracle.truffle.api.TruffleLanguage$Env);
    descriptor: (Lcom/oracle/truffle/api/TruffleLanguage$Env;)Lcom/oracle/truffle/api/debug/Debugger;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.TruffleLanguage$Env env
         0: .line 346
            aload 0 /* env */
            aload 0 /* env */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.getInstruments:()Ljava/util/Map;
            ldc "debugger"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.InstrumentInfo
            ldc Lcom/oracle/truffle/api/debug/Debugger;
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.lookup:(Lcom/oracle/truffle/api/InstrumentInfo;Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Debugger
            areturn
        end local 0 // com.oracle.truffle.api.TruffleLanguage$Env env
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   env  Lcom/oracle/truffle/api/TruffleLanguage$Env;
    MethodParameters:
      Name  Flags
      env   
}
SourceFile: "Debugger.java"
NestMembers:
  com.oracle.truffle.api.debug.Debugger$1  com.oracle.truffle.api.debug.Debugger$AccessorDebug
InnerClasses:
  public final Env = com.oracle.truffle.api.TruffleLanguage$Env of com.oracle.truffle.api.TruffleLanguage
  com.oracle.truffle.api.debug.Debugger$1
  final AccessorDebug = com.oracle.truffle.api.debug.Debugger$AccessorDebug of com.oracle.truffle.api.debug.Debugger
  public abstract DebuggerFactory = com.oracle.truffle.api.debug.impl.DebuggerInstrument$DebuggerFactory of com.oracle.truffle.api.debug.impl.DebuggerInstrument
  public final Env = com.oracle.truffle.api.instrumentation.TruffleInstrument$Env of com.oracle.truffle.api.instrumentation.TruffleInstrument