Example #1
0
        internal ICorDebugFrame GetFrameAt(FrameID frameID)
        {
            process.AssertPaused();

            ICorDebugChainEnum corChainEnum = CorThread.EnumerateChains();

            if (frameID.ChainIndex >= corChainEnum.Count)
            {
                throw new ArgumentException("Chain index too big", "chainIndex");
            }
            corChainEnum.Skip(corChainEnum.Count - frameID.ChainIndex - 1);

            ICorDebugChain corChain = corChainEnum.Next();

            if (corChain.IsManaged == 0)
            {
                throw new ArgumentException("Chain is not managed", "chainIndex");
            }

            ICorDebugFrameEnum corFrameEnum = corChain.EnumerateFrames();

            if (frameID.FrameIndex >= corFrameEnum.Count)
            {
                throw new ArgumentException("Frame index too big", "frameIndex");
            }
            corFrameEnum.Skip(corFrameEnum.Count - frameID.FrameIndex - 1);

            return(corFrameEnum.Next());
        }
        public uint Next(uint celt, Wrappers.CorDebug.ICorDebugChain[] chains)
        {
            uint pceltFetched;

            Interop.CorDebug.ICorDebugChain[] array_chains = new Interop.CorDebug.ICorDebugChain[chains.Length];
            for (int i = 0; (i < chains.Length); i = (i + 1))
            {
                if ((chains[i] != null))
                {
                    array_chains[i] = chains[i].WrappedObject;
                }
            }
            this.WrappedObject.Next(celt, array_chains, out pceltFetched);
            for (int i = 0; (i < chains.Length); i = (i + 1))
            {
                if ((array_chains[i] != null))
                {
                    chains[i] = ICorDebugChain.Wrap(array_chains[i]);
                }
                else
                {
                    chains[i] = null;
                }
            }
            return(pceltFetched);
        }
Example #3
0
        public ICorDebugChain Next()
        {
            ICorDebugChain[] corChains     = new ICorDebugChain[1];
            uint             chainsFetched = this.Next(1, corChains);

            if (chainsFetched == 0)
            {
                return(null);
            }
            else
            {
                return(corChains[0]);
            }
        }