Example #1
0
        internal unsafe static void ReportStackDetails()
        {
            VTable.DebugPrint("\nStack details:\n");
            VTable.DebugPrint("\tTotal number of reserved pages: {0}",
                              __arglist(TotalNumPages(PageType.Stack)));

            for (int i = 0; i < Thread.threadTable.Length; i++)
            {
                traceablePtrs.Initialize();
                traceablePinnedPtrs.Initialize();

                Thread t = Thread.threadTable[i];
                if (t == null)
                {
                    continue;
                }

                uint numStackFrames =
                    CallStack.ScanStack(t, traceablePtrs,
                                        traceablePinnedPtrs);

                VTable.DebugPrint("\n\tThread: {0}",
                                  __arglist(i));
                VTable.DebugPrint("\n\t\tStack frame count: {0}",
                                  __arglist(numStackFrames));
                VTable.DebugPrint("\n\t\tManaged ptrs to static data: {0}",
                                  __arglist
                                      (traceablePtrs.managedPtrsToStaticData));
                VTable.DebugPrint("\n\t\tManaged ptrs to stack: {0}",
                                  __arglist(traceablePtrs.managedPtrsToStack));
                VTable.DebugPrint("\n\t\tExterior managed heap ptrs: {0}",
                                  __arglist
                                      (traceablePtrs.exteriorManagedHeapPtrs));
                VTable.DebugPrint("\n\t\tInterior managed heap ptrs: {0}",
                                  __arglist
                                      (traceablePtrs.interiorManagedHeapPtrs));

#if !SINGULARITY
                UIntPtr stackTop  = (UIntPtr)CallStack.StackMarker(t);
                uint    stackSize = 0;
                if (stackTop != UIntPtr.Zero)
                {
                    VTable.Assert(CallStack.StackBase(t) > stackTop,
                                  @"t.asmStackBase > stackTop");

                    stackSize = (uint)(CallStack.StackBase(t) - stackTop);
                }
                VTable.DebugPrint("\n\t\tApprox. stack size: {0}B",
                                  __arglist(stackSize));
#endif

                // REVIEW: Why are these here?
                VTable.Assert(traceablePinnedPtrs.
                              managedPtrsToStaticData == 0,
                              @"traceablePinnedPtrs.
                            managedPtrsToStaticData == 0");
                VTable.Assert(traceablePinnedPtrs.
                              managedPtrsToStack == 0,
                              @"traceablePinnedPtrs.
                            managedPtrsToStack == 0");

                VTable.DebugPrint("\n\t\tPinned managed heap ptrs: {0}",
                                  __arglist
                                      (traceablePinnedPtrs.exteriorManagedHeapPtrs +
                                      traceablePinnedPtrs.interiorManagedHeapPtrs));
            }

            VTable.DebugPrint("\n");
        }
Example #2
0
 void Verify(NonNullReferenceVisitor threadReferenceVisitor,
             Thread thread)
 {
     CallStack.ScanStack(thread, threadReferenceVisitor,
                         threadReferenceVisitor);
 }