001 package nl.cwi.sen1.tide.adapters.gdb; 002 003 import java.io.File; 004 import java.util.regex.Matcher; 005 import java.util.regex.Pattern; 006 007 public class SetBreakpointCmd 008 extends Command 009 { 010 private static Pattern breakPattern; 011 012 private int breakpoint; 013 private String method; 014 private String file; 015 private int linenr; 016 017 static { 018 breakPattern = Pattern.compile("Breakpoint ([0-9]+) at 0x[0-9a-f]+: " + "file ([a-zA-Z\\.]+), line ([0-9]+)\\."); 019 } 020 021 public SetBreakpointCmd(GdbAdapter adapter, String method) 022 { 023 super(adapter); 024 this.method = method; 025 } 026 027 public SetBreakpointCmd(GdbAdapter adapter, String file, int line) 028 { 029 super(adapter); 030 this.file = file; 031 this.linenr = line; 032 } 033 034 public String command() 035 { 036 if(method != null) 037 return "break " + method + "\n"; 038 File f = new File(file); 039 return "break " + f.getName() + ":" + linenr + "\n"; 040 } 041 042 public boolean response(String line) 043 { 044 Matcher matcher = breakPattern.matcher(line); 045 046 if(matcher.matches()) { 047 breakpoint = Integer.parseInt(matcher.group(1)); 048 file = matcher.group(2); 049 linenr = Integer.parseInt(matcher.group(3)); 050 return true; 051 } 052 053 debugMsg("line '" + line + "' does not match with break pattern"); 054 return false; 055 } 056 057 public int getBreakpoint() 058 { 059 return breakpoint; 060 } 061 062 public String getFileName() 063 { 064 return file; 065 } 066 067 public int getLineNr() 068 { 069 return linenr; 070 } 071 }