Пример #1
0
 internal void AddedBoundBreakpoint()
 {
     if (_breakState == MIBreakpointState.Pending)
     {
         _breakState = MIBreakpointState.Single;
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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));
        }
Пример #5
0
 internal PendingBreakpoint(AD7PendingBreakpoint pbreak, string number, MIBreakpointState state)
 {
     AD7breakpoint = pbreak;
     Number = number;
     _breakState = state;
 }
Пример #6
0
 internal void AddedBoundBreakpoint()
 {
     if (_breakState == MIBreakpointState.Pending)
     {
         _breakState = MIBreakpointState.Single;
     }
 }
Пример #7
0
 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;
 }
Пример #8
0
 internal PendingBreakpoint(AD7PendingBreakpoint pbreak, string number, MIBreakpointState state)
 {
     AD7breakpoint = pbreak;
     Number        = number;
     _breakState   = state;
 }