public void Get_The_Current_Frame_Correctly()
        {
            // arrange
            var engBuilder = new DebugEngineProxyBuilder();

            engBuilder.WithExecuteResult("!positions", @">Thread ID=0x7590 - Position: 168CC:0
 Thread ID=0x12A0 - Position: 211F5:0
 Thread ID=0x6CDC - Position: 21D59:0
 Thread ID=0x2984 - Position: 21DFE:0
 Thread ID=0x3484 - Position: 21ECA:0
 Thread ID=0x60B4 - Position: 2414F:0
 Thread ID=0x1F54 - Position: 241DE:0
");
            engBuilder.With32Bit(false);
            engBuilder.WithThreadId(0x7590);
            var stackBuilder = new StackFacadeBuilder();
            var stackTrace   = new StackTrace(new List <StackFrame>());

            stackBuilder.WithGetCurrentStackTrace(stackTrace);

            var registerSet     = new RegisterSet();
            var registerBuilder = new RegisterFacadeBuilder();

            registerBuilder.WithGetCurrentRegisterSet(Register.All, registerSet);

            var disassemblyLine = new DisassemblyLine(0x00007ffa51315595, ByteArrayBuilder.StringToByteArray("4d3bd1"),
                                                      "cmp", "r10,r9");
            var disBuilder = new DisassemblyFacadeBuilder();

            disBuilder.WithGetDisassemblyLines(1, new[] { disassemblyLine });
            var facade = new TimeTravelFacade
            {
                DebugEngineProxy  = engBuilder.Build(),
                StackFacade       = stackBuilder.Build(),
                RegisterFacade    = registerBuilder.Build(),
                DisassemblyFacade = disBuilder.Build()
            };

            // act
            var frame = facade.GetCurrentFrame();

            // assert
            frame.Position.Should().Be(new Position(0x168CC, 0));
            frame.DisassemblyLine.Should().Be(disassemblyLine);
            frame.RegisterSet.Should().Be(registerSet);
            frame.StackTrace.Should().Be(stackTrace);
            frame.ThreadId.Should().Be(0x7590);
        }
Esempio n. 2
0
        public void Get_The_Current_StackTrace_Correctly()
        {
            // arrange
            var builder = new DebugEngineProxyBuilder();

            builder.WithExecuteResult("k", @"Child-SP          RetAddr           Call Site
00000000`0014d180 00007ffa`513150ed KERNEL32!GetTimeFormatWWorker+0xc43
00000000`0014d1d0 00007ffa`513138e6 KERNEL32!GetTimeFormatWWorker+0x7ed
00000000`0014ff90 00000000`00000000 ntdll!RtlUserThreadStart+0x21");
            builder.WithExecuteResult("~~[7590] k", @"Child-SP          RetAddr           Call Site
00000000`0014d180 00007ffa`513150ed KERNEL32!GetTimeFormatWWorker+0xc43
00000000`0014d1d0 00007ffa`513138e6 KERNEL32!GetTimeFormatWWorker+0x7ed
00000000`0014ff90 00000000`00000000 ntdll!RtlUserThreadStart+0x21");

            builder.WithThreadId(0x7590);
            var stackFacade = new StackFacade {
                DebugEngineProxy = builder.Build()
            };

            // act
            var stackTrace  = stackFacade.GetCurrentStackTrace();
            var stackTrace2 = stackFacade.GetCurrentStackTrace(0x7590);

            // assert
            stackTrace.Should().Be(new StackTrace(new[]
            {
                new StackFrame(0x000000000014d180, 0x00007ffa513150ed, "KERNEL32", "GetTimeFormatWWorker", 0xc43),
                new StackFrame(0x000000000014d1d0, 0x00007ffa513138e6, "KERNEL32", "GetTimeFormatWWorker", 0x7ed),
                new StackFrame(0x000000000014ff90, 0x0000000000000000, "ntdll", "RtlUserThreadStart", 0x21)
            }));
            stackTrace2.Should().Be(new StackTrace(new[]
            {
                new StackFrame(0x000000000014d180, 0x00007ffa513150ed, "KERNEL32", "GetTimeFormatWWorker", 0xc43),
                new StackFrame(0x000000000014d1d0, 0x00007ffa513138e6, "KERNEL32", "GetTimeFormatWWorker", 0x7ed),
                new StackFrame(0x000000000014ff90, 0x0000000000000000, "ntdll", "RtlUserThreadStart", 0x21)
            }));
        }