// // // // // $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