//
//
//
//
// $Revision$
//
using System;
namespace Debugger.Tests.TestPrograms
{
public class FunctionVariablesLifetime
{
public int @class = 3;
public static void Main()
{
new FunctionVariablesLifetime().Function(1);
System.Diagnostics.Debugger.Break(); // 5
}
void Function(int argument)
{
int local = 2;
System.Diagnostics.Debugger.Break(); // 1
SubFunction();
System.Diagnostics.Debugger.Break(); // 3
SubFunction();
}
void SubFunction()
{
int localInSubFunction = 4;
System.Diagnostics.Debugger.Break(); // 2, 4
}
}
}
#if TEST_CODE
namespace Debugger.Tests {
public partial class DebuggerTests
{
[NUnit.Framework.Test]
public void FunctionVariablesLifetime()
{
Value argument = null;
Value local = null;
Value localInSubFunction = null;
Value @class = null;
StartTest("FunctionVariablesLifetime.cs"); // 1 - Enter program
argument = process.SelectedStackFrame.GetArgumentValue(0);
local = process.SelectedStackFrame.GetLocalVariableValue("local");
@class = process.SelectedStackFrame.GetThisValue().GetMemberValue("class");
ObjectDump("argument", argument);
ObjectDump("local", local);
ObjectDump("@class", @class);
process.Continue(); // 2 - Go to the SubFunction
localInSubFunction = process.SelectedStackFrame.GetLocalVariableValue("localInSubFunction");
ObjectDump("argument", argument);
ObjectDump("local", local);
ObjectDump("@class", @class);
ObjectDump("localInSubFunction", @localInSubFunction);
process.Continue(); // 3 - Go back to Function
ObjectDump("argument", argument);
ObjectDump("local", local);
ObjectDump("@class", @class);
ObjectDump("localInSubFunction", @localInSubFunction);
process.Continue(); // 4 - Go to the SubFunction
ObjectDump("argument", argument);
ObjectDump("local", local);
ObjectDump("@class", @class);
ObjectDump("localInSubFunction", @localInSubFunction);
localInSubFunction = process.SelectedStackFrame.GetLocalVariableValue("localInSubFunction");
ObjectDump("localInSubFunction(new)", @localInSubFunction);
process.Continue(); // 5 - Setp out of both functions
ObjectDump("argument", argument);
ObjectDump("local", local);
ObjectDump("@class", @class);
ObjectDump("localInSubFunction", @localInSubFunction);
EndTest();
}
}
}
#endif
#if EXPECTED_OUTPUT
mscorlib.dll (No symbols)
FunctionVariablesLifetime.exe (Has symbols)
Break FunctionVariablesLifetime.cs:25,4-25,40
<_x0040_class>
Break FunctionVariablesLifetime.cs:34,4-34,40
<_x0040_class>
Break FunctionVariablesLifetime.cs:27,4-27,40
<_x0040_class>
Break FunctionVariablesLifetime.cs:34,4-34,40
<_x0040_class>
Break FunctionVariablesLifetime.cs:19,4-19,40
<_x0040_class>
#endif // EXPECTED_OUTPUT