Exemple #1
0
        public DebugThread GetCallstack(ThreadInfo threadInfo)
        {
            var context = GetThreadContext(threadInfo);
            var frames  = GetCallstackFrames(context);
            var f       = new List <StackFrame>(frames.Count);
            var retVal  = new DebugThread(f, threadInfo);

            f.AddRange(frames.Select(frame => ToStackFrame(frame, retVal)));
            return(retVal);
        }
Exemple #2
0
        private StackFrame ToStackFrame(FrameInfo frameInfo, DebugThread thread)
        {
            ulong displacement;
            var   builder = new StringBuilder(256);
            var   frame   = frameInfo.StackFrame;

            _symbols.GetSymbolNameByOffset(frame.InstructionOffset, ref builder, out displacement);
            var name = builder.ToString();

            return(new StackFrame(frame.ReturnOffset, frame.InstructionOffset, frame.FrameOffset, (ushort)frame.FrameNumber, string.Intern(name), displacement, thread));
        }
Exemple #3
0
        public StackFrame(ulong returnOffset, ulong instructionOffset, ulong frameOffset, ushort frameNumber, string name,
                          ulong displacement, DebugThread thread)
        {
            ReturnOffset      = returnOffset;
            InstructionOffset = instructionOffset;
            FrameOffset       = frameOffset;
            FrameNumber       = frameNumber;
            Name = string.Intern(name);
            var sep = name.IndexOf('!');

            sep          = (sep == -1) ? 0 : sep;
            Module       = string.Intern(name.Substring(0, sep));
            Function     = name.Substring(sep + 1);
            Displacement = displacement;
            Thread       = thread;
        }