Browse Source

Added debugger test: FunctionLifetime

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@868 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
aef003e31a
  1. 25
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  2. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj
  3. 34
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs
  4. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestProgram.cs
  5. 32
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/FunctionLifetime.cs

25
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs

@ -26,6 +26,7 @@ namespace Debugger @@ -26,6 +26,7 @@ namespace Debugger
ICorDebugILFrame corILFrame;
object corILFrameDebuggerSessionID;
bool steppedOut;
Thread thread;
uint chainIndex;
uint frameIndex;
@ -75,11 +76,7 @@ namespace Debugger @@ -75,11 +76,7 @@ namespace Debugger
/// </summary>
public bool HasExpired {
get {
if (corILFrameDebuggerSessionID == debugger.SessionID) {
return false; // valid
} else {
return thread == null;
}
return steppedOut;
}
}
@ -117,14 +114,12 @@ namespace Debugger @@ -117,14 +114,12 @@ namespace Debugger
tracingStepper.CorStepper.StepOut();
tracingStepper.PauseWhenComplete = false;
tracingStepper.StepComplete += delegate {
thread = null;
steppedOut = true;
};
}
#region Helpping proprerties
internal ICorDebugILFrame CorILFrame {
get {
get {
if (HasExpired) throw new DebuggerException("Function has expired");
if (corILFrameDebuggerSessionID != debugger.SessionID) {
corILFrame = thread.GetFunctionAt(chainIndex, frameIndex).CorILFrame;
@ -133,7 +128,7 @@ namespace Debugger @@ -133,7 +128,7 @@ namespace Debugger
return corILFrame;
}
}
internal uint corInstructionPtr {
get {
uint corInstructionPtr;
@ -143,8 +138,6 @@ namespace Debugger @@ -143,8 +138,6 @@ namespace Debugger
}
}
// Helpping properties for symbols
internal ISymbolReader symReader {
get {
if (module.SymbolsLoaded == false) return null;
@ -152,7 +145,7 @@ namespace Debugger @@ -152,7 +145,7 @@ namespace Debugger
return module.SymReader;
}
}
internal ISymbolMethod symMethod {
get {
if (symReader == null) {
@ -166,9 +159,7 @@ namespace Debugger @@ -166,9 +159,7 @@ namespace Debugger
}
}
}
#endregion
public void StepInto()
{
Step(true);

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj

@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
<Compile Include="Src\TestPrograms\Callstack.cs" />
<Compile Include="Src\TestPrograms\FunctionArgumentVariables.cs" />
<Compile Include="Src\TestPrograms\FunctionLocalVariables.cs" />
<Compile Include="Src\TestPrograms\FunctionLifetime.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Src" />

34
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -308,5 +308,39 @@ namespace Debugger.Tests @@ -308,5 +308,39 @@ namespace Debugger.Tests
debugger.Continue();
debugger.WaitForPrecessExit();
}
[Test]
public void FunctionLifetime()
{
Function function;
StartProgram("FunctionLifetime");
WaitForPause(PausedReason.Break, null);
function = debugger.CurrentFunction;
Assert.IsNotNull(function);
Assert.AreEqual("Function", function.Name);
Assert.AreEqual(false, function.HasExpired);
Assert.AreEqual("1", function.GetArgumentVariable(0).Value.AsString);
debugger.Continue(); // Go to the SubFunction
WaitForPause(PausedReason.Break, null);
Assert.AreEqual("SubFunction", debugger.CurrentFunction.Name);
Assert.AreEqual(false, function.HasExpired);
Assert.AreEqual("1", function.GetArgumentVariable(0).Value.AsString);
debugger.Continue(); // Go back to Function
WaitForPause(PausedReason.Break, null);
Assert.AreEqual("Function", debugger.CurrentFunction.Name);
Assert.AreEqual(false, function.HasExpired);
Assert.AreEqual("1", function.GetArgumentVariable(0).Value.AsString);
debugger.Continue(); // Setp out of function
WaitForPause(PausedReason.Break, null);
Assert.AreEqual("Main", debugger.CurrentFunction.Name);
Assert.AreEqual(true, function.HasExpired);
debugger.Continue();
debugger.WaitForPrecessExit();
}
}
}

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestProgram.cs

@ -24,6 +24,7 @@ namespace Debugger.Tests @@ -24,6 +24,7 @@ namespace Debugger.Tests
case "Callstack": Progs.Callstack.Main(); break;
case "FileRelease": Progs.FileRelease.Main(); break;
case "FunctionArgumentVariables": Progs.FunctionArgumentVariables.Main(); break;
case "FunctionLifetime": Progs.FunctionLifetime.Main(); break;
case "FunctionLocalVariables": Progs.FunctionLocalVariables.Main(); break;
case "HelloWorld": Progs.HelloWorld.Main(); break;
case "SimpleProgram": Progs.SimpleProgram.Main(); break;

32
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/FunctionLifetime.cs

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
namespace Debugger.Tests.TestPrograms
{
public class FunctionLifetime
{
public static void Main()
{
Function(1);
System.Diagnostics.Debugger.Break(); // 4
}
static void Function(int i)
{
System.Diagnostics.Debugger.Break(); // 1
SubFunction();
System.Diagnostics.Debugger.Break(); // 3
}
static void SubFunction()
{
System.Diagnostics.Debugger.Break(); // 2
}
}
}
Loading…
Cancel
Save