|
|
|
@ -57,6 +57,15 @@ namespace Debugger.Tests |
|
|
|
debugger.Start(exeFilename, Path.GetDirectoryName(exeFilename), programName); |
|
|
|
debugger.Start(exeFilename, Path.GetDirectoryName(exeFilename), programName); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void WaitForPause(PausedReason expectedReason, string expectedLastLogMessage) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (expectedLastLogMessage != null) expectedLastLogMessage += "\r\n"; |
|
|
|
|
|
|
|
debugger.WaitForPause(); |
|
|
|
|
|
|
|
Assert.AreEqual(true, debugger.IsPaused); |
|
|
|
|
|
|
|
Assert.AreEqual(expectedReason, debugger.PausedReason); |
|
|
|
|
|
|
|
Assert.AreEqual(expectedLastLogMessage, lastLogMessage); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
[Test] |
|
|
|
public void SimpleProgram() |
|
|
|
public void SimpleProgram() |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -80,8 +89,7 @@ namespace Debugger.Tests |
|
|
|
{ |
|
|
|
{ |
|
|
|
StartProgram("Break"); |
|
|
|
StartProgram("Break"); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPause(); |
|
|
|
WaitForPause(PausedReason.Break, null); |
|
|
|
Assert.AreEqual(PausedReason.Break, debugger.PausedReason); |
|
|
|
|
|
|
|
debugger.Continue(); |
|
|
|
debugger.Continue(); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPrecessExit(); |
|
|
|
debugger.WaitForPrecessExit(); |
|
|
|
@ -90,13 +98,12 @@ namespace Debugger.Tests |
|
|
|
[Test] |
|
|
|
[Test] |
|
|
|
public void Symbols() |
|
|
|
public void Symbols() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
Assert.AreEqual("debugger.tests.exe", Path.GetFileName(assemblyFilename).ToLower()); |
|
|
|
Assert.IsTrue(File.Exists(symbolsFilename), "Symbols file not found (.pdb)"); |
|
|
|
Assert.IsTrue(File.Exists(symbolsFilename), "Symbols file not found (.pdb)"); |
|
|
|
|
|
|
|
|
|
|
|
StartProgram("Symbols"); |
|
|
|
StartProgram("Symbols"); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPause(); |
|
|
|
WaitForPause(PausedReason.Break, null); |
|
|
|
Assert.AreEqual(PausedReason.Break, debugger.PausedReason); |
|
|
|
|
|
|
|
Assert.AreEqual("debugger.tests.exe", Path.GetFileName(assemblyFilename).ToLower()); |
|
|
|
|
|
|
|
Assert.AreEqual(true, debugger.GetModule(Path.GetFileName(assemblyFilename)).SymbolsLoaded, "Module symbols not loaded"); |
|
|
|
Assert.AreEqual(true, debugger.GetModule(Path.GetFileName(assemblyFilename)).SymbolsLoaded, "Module symbols not loaded"); |
|
|
|
debugger.Continue(); |
|
|
|
debugger.Continue(); |
|
|
|
|
|
|
|
|
|
|
|
@ -110,22 +117,16 @@ namespace Debugger.Tests |
|
|
|
|
|
|
|
|
|
|
|
StartProgram("Breakpoint"); |
|
|
|
StartProgram("Breakpoint"); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPause(); |
|
|
|
WaitForPause(PausedReason.Break, null); |
|
|
|
Assert.AreEqual(PausedReason.Break, debugger.PausedReason); |
|
|
|
|
|
|
|
Assert.AreEqual("", log); |
|
|
|
|
|
|
|
Assert.AreEqual(true, b.Enabled); |
|
|
|
Assert.AreEqual(true, b.Enabled); |
|
|
|
Assert.AreEqual(true, b.HadBeenSet, "Breakpoint is not set"); |
|
|
|
Assert.AreEqual(true, b.HadBeenSet, "Breakpoint is not set"); |
|
|
|
Assert.AreEqual(18, b.SourcecodeSegment.StartLine); |
|
|
|
Assert.AreEqual(18, b.SourcecodeSegment.StartLine); |
|
|
|
debugger.Continue(); |
|
|
|
debugger.Continue(); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPause(); |
|
|
|
WaitForPause(PausedReason.Breakpoint, "Mark 1"); |
|
|
|
Assert.AreEqual(PausedReason.Breakpoint, debugger.PausedReason, "Breakpoint was not hit"); |
|
|
|
|
|
|
|
Assert.AreEqual("Mark 1\r\n", log); |
|
|
|
|
|
|
|
debugger.Continue(); |
|
|
|
debugger.Continue(); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPause(); |
|
|
|
WaitForPause(PausedReason.Break, "Mark 2"); |
|
|
|
Assert.AreEqual(PausedReason.Break, debugger.PausedReason); |
|
|
|
|
|
|
|
Assert.AreEqual("Mark 1\r\nMark 2\r\n", log); |
|
|
|
|
|
|
|
debugger.Continue(); |
|
|
|
debugger.Continue(); |
|
|
|
|
|
|
|
|
|
|
|
debugger.WaitForPrecessExit(); |
|
|
|
debugger.WaitForPrecessExit(); |
|
|
|
@ -167,5 +168,39 @@ namespace Debugger.Tests |
|
|
|
Assert.Fail("Symbols file not released\n" + e.ToString()); |
|
|
|
Assert.Fail("Symbols file not released\n" + e.ToString()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
|
|
|
public void Stepping() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StartProgram("Stepping"); |
|
|
|
|
|
|
|
WaitForPause(PausedReason.Break, null); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepOver(); // Debugger.Break
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, null); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepOver(); // Debug.WriteLine 1
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "1"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepInto(); // Method Sub
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "1"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepInto(); // '{'
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "1"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepInto(); // Debug.WriteLine 2
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "2"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepOut(); // Method Sub
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "4"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepOver(); // Method Sub
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "4"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.StepOver(); // Method Sub2
|
|
|
|
|
|
|
|
WaitForPause(PausedReason.StepComplete, "5"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger.Continue(); |
|
|
|
|
|
|
|
debugger.WaitForPrecessExit(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|