internal void AddedBoundBreakpoint() { if (_breakState == MIBreakpointState.Pending) { _breakState = MIBreakpointState.Single; } }
internal List <BoundBreakpoint> BindAddresses(ResultValue bkpt) { List <BoundBreakpoint> resultList = new List <BoundBreakpoint>(); if (bkpt == null) { return(resultList); } BoundBreakpoint bbp = null; if (bkpt is ValueListValue) { var list = (ValueListValue)bkpt; for (int i = 1; i < list.Content.Length; ++i) { bbp = GetBoundBreakpoint(list.Content[i] as TupleValue); if (bbp != null) { resultList.Add(bbp); } } } else { _breakState = StringToBreakpointState(bkpt.TryFindString("addr")); bbp = GetBoundBreakpoint(bkpt as TupleValue); if (bbp != null) { resultList.Add(bbp); } } return(resultList); }
/// <summary> /// Decode the mi results and create a bound breakpoint from it. /// </summary> /// <param name="bkpt">breakpoint description</param> /// <returns>null if breakpoint is pending</returns> private async Task <BoundBreakpoint> GetBoundBreakpoint(TupleValue bkpt) { string addrString = bkpt.TryFindString("addr"); MIBreakpointState state = StringToBreakpointState(addrString); if (state == MIBreakpointState.Multiple) { // MI gives no way to find the set of addresses a breakpoint is bound to. So bind the breakpoint to address zero until hit. // When the breakpoint is hit can rebind to actual address. bkpt.Content.RemoveAll((keyval) => { return(keyval.Name == "addr"); }); bkpt.Content.Add(new NamedResultValue("addr", new ConstValue("0"))); } else if (state == MIBreakpointState.Pending) { return(null); } else if (!string.IsNullOrEmpty(addrString) && bkpt.FindAddr("addr") == BreakpointManager.INVALID_ADDRESS) { return(null); } var bbp = new BoundBreakpoint(this, bkpt); // On GDB, the returned line information is from the pending breakpoint instead of the bound breakpoint. // Check the address mapping to make sure the line info is correct. if (this.DebuggedProcess.MICommandFactory.Mode == MIMode.Gdb && !string.IsNullOrEmpty(bbp.CompiledFileName)) { bbp.Line = await this.DebuggedProcess.LineForStartAddress(bbp.CompiledFileName, bbp.Addr); } return(bbp); }
/// <summary> /// Decode the mi results and create a bound breakpoint from it. /// </summary> /// <param name="bkpt">breakpoint description</param> /// <returns>null if breakpoint is pending</returns> private BoundBreakpoint GetBoundBreakpoint(TupleValue bkpt) { string addrString = bkpt.TryFindString("addr"); MIBreakpointState state = StringToBreakpointState(addrString); if (state == MIBreakpointState.Multiple) { // MI gives no way to find the set of addresses a breakpoint is bound to. So bind the breakpoint to address zero until hit. // When the breakpoint is hit can rebind to actual address. bkpt.Content.RemoveAll((keyval) => { return(keyval.Name == "addr"); }); bkpt.Content.Add(new NamedResultValue("addr", new ConstValue("0"))); } else if (state == MIBreakpointState.Pending) { return(null); } else if (!string.IsNullOrEmpty(addrString) && bkpt.FindAddr("addr") == BreakpointManager.INVALID_ADDRESS) { return(null); } return(new BoundBreakpoint(this, bkpt)); }
internal PendingBreakpoint(AD7PendingBreakpoint pbreak, string number, MIBreakpointState state) { AD7breakpoint = pbreak; Number = number; _breakState = state; }
internal void AddedBoundBreakpoint() { if (_breakState == MIBreakpointState.Pending) { _breakState = MIBreakpointState.Single; } }
internal List<BoundBreakpoint> BindAddresses(ResultValue bkpt) { List<BoundBreakpoint> resultList = new List<BoundBreakpoint>(); if (bkpt == null) { return resultList; } BoundBreakpoint bbp = null; if (bkpt is ValueListValue) { var list = (ValueListValue)bkpt; for (int i = 1; i < list.Content.Length; ++i) { bbp = GetBoundBreakpoint(list.Content[i] as TupleValue); if (bbp != null) resultList.Add(bbp); } } else { _breakState = StringToBreakpointState(bkpt.TryFindString("addr")); bbp = GetBoundBreakpoint(bkpt as TupleValue); if (bbp != null) resultList.Add(bbp); } return resultList; }
internal PendingBreakpoint(AD7PendingBreakpoint pbreak, string number, MIBreakpointState state) { AD7breakpoint = pbreak; Number = number; _breakState = state; }