예제 #1
0
        /// <summary>
        /// Gets all code chunks
        /// </summary>
        /// <returns></returns>
        public unsafe CodeChunkInfo[] GetCodeChunks()
        {
            var c2 = obj as ICorDebugCode2;

            if (c2 == null)
            {
                return(Array.Empty <CodeChunkInfo>());
            }
            uint cnumChunks;
            int  hr = c2.GetCodeChunks(0, out cnumChunks, IntPtr.Zero);

            if (hr < 0)
            {
                return(Array.Empty <CodeChunkInfo>());
            }
            var infos = new CodeChunkInfo[cnumChunks];

            if (cnumChunks != 0)
            {
                fixed(void *p = &infos[0])
                hr = c2.GetCodeChunks(cnumChunks, out cnumChunks, new IntPtr(p));

                if (hr < 0)
                {
                    return(Array.Empty <CodeChunkInfo>());
                }
            }
            return(infos);
        }
예제 #2
0
 public CodeChunkInfo[] GetCodeChunks() => debugger.Dispatcher.UI(() => {
     var chunks = this.CorCode.GetCodeChunks();
     var res    = new CodeChunkInfo[chunks.Length];
     for (int i = 0; i < chunks.Length; i++)
     {
         res[i] = new CodeChunkInfo(chunks[i].StartAddr, chunks[i].Length);
     }
     return(res);
 });