////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        public int EnumThreads(out IEnumDebugThreads2 ppEnum)
        {
            //
            // Enumerates the threads that are running in this program.
            //

            LoggingUtils.PrintFunction();

            try
            {
                if (AttachedEngine == null)
                {
                    throw new InvalidOperationException();
                }

                List <IDebugThread2> threads = new List <IDebugThread2> ();

                uint count;

                {
                    LoggingUtils.RequireOk(AttachedEngine.NativeDebugger.NativeProgram.EnumThreads(out ppEnum));

                    LoggingUtils.RequireOk(ppEnum.GetCount(out count));

                    IDebugThread2 [] threadArray = new IDebugThread2 [count];

                    LoggingUtils.RequireOk(ppEnum.Next(count, threadArray, ref count));

                    threads.AddRange(threadArray);
                }

                {
                    LoggingUtils.RequireOk(AttachedEngine.JavaDebugger.JavaProgram.EnumThreads(out ppEnum));

                    LoggingUtils.RequireOk(ppEnum.GetCount(out count));

                    IDebugThread2 [] threadArray = new IDebugThread2 [count];

                    LoggingUtils.RequireOk(ppEnum.Next(count, threadArray, ref count));
                }

                ppEnum = new DebuggeeThread.Enumerator(threads);

                if (ppEnum == null)
                {
                    throw new InvalidOperationException();
                }

                return(Constants.S_OK);
            }
            catch (Exception e)
            {
                LoggingUtils.HandleException(e);

                ppEnum = null;

                return(Constants.E_FAIL);
            }
        }
Esempio n. 2
0
        void AssertEnumThreads(List <IDebugThread> mockThreads, IEnumDebugThreads2 enumThreads)
        {
            var numberThreads = mockThreads.Count;

            Assert.NotNull(enumThreads);
            uint fetched = 0;

            IDebugThread2[] debugthreads = new IDebugThread2[numberThreads];
            enumThreads.Next((uint)numberThreads, debugthreads, ref fetched);
            Assert.AreEqual(numberThreads, fetched);
            for (int i = 0; i < numberThreads; i++)
            {
                Assert.AreEqual(mockThreads[i], debugthreads[i]);
            }
        }