anchor.diff:      property Process[i: Integer]: TDbgProcess read GetProcess;
     end;
     
  +// utility function
  +function SetThreadExecAddr(athread: TDbgThread; const Addr: TDbgPtr): Boolean;
   
   implementation
  +
  +function SetThreadExecAddr(athread: TDbgThread; const Addr: TDbgPtr): Boolean;
  +var
  +  datalist  : TDbgDataBytesList;
  +begin
  +  datalist:=TDbgDataBytesList.Create;
  +  try
  +    Result:=Assigned(athread) and (athread.GetThreadRegs(datalist));
  +    if Result then begin
  +      datalist.Reg[CPUCode.ExecuteRegisterName].DbgPtr:=Addr;
  +      Result:=athread.SetThreadRegs(datalist);
  +    end;
  +  finally
  +    datalist.Free;
  +  end;
  +end;
   
   type
     { TMemAccessObject }
  
positive.code: interface                      
  
  uses
    Classes, contnrs, dbgTypes, dbgCPU; 
    
  type
    TDbgMain = class;
  
negative.code:   if Assigned(thr) and thr.ProcWaitStep then
      HandleManualStep(Event, rep);
  
    writeln('process: ', ID, ' handling breakpoint @', HexStr(Event.Addr, sizeof(Event.Addr)*2));
    brk:=FindBreakpoint(Event.Addr, False);
    thr:=FindThread(Event.Thread);
    if Assigned(brk) and Assigned(thr) then begin
      writeln('break found! disabling');
      brk.fRaw.Disable;
      thr.ProcWaitStep:=True;
      thr.ProcBreakAddr:=Event.Addr;
  
      writeln('ralling back exection to bp address');
      if not SetThreadExecAddr(thr, Event.Addr) then
        writeln('unable to rallback!');
  
      StartSingleStep:=True;
    end else begin
      writeln('break or thread not found');
      StartSingleStep:=False;
    end;
  end;
  
  procedure TDbgProcess.HandleManualStep(const Event: TDbgEvent; var ReportToUser: Boolean);
  