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); }
public ICorDebugChain Next() { ICorDebugChain[] corChains = new ICorDebugChain[1]; uint chainsFetched = this.Next(1, corChains); if (chainsFetched == 0) { return(null); } else { return(corChains[0]); } }