diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs index ed0cfcb2fa..06fd59e67c 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs @@ -61,6 +61,7 @@ namespace Debugger get { try { CorThread.UserState.ToString(); + CorThread.EnumerateChains(); return true; } catch (COMException e) { // The state of the thread is invalid. diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Values/Value.Object.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Values/Value.Object.cs index 79a00d0070..b4277d30b6 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Values/Value.Object.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Values/Value.Object.cs @@ -288,7 +288,7 @@ namespace Debugger } /// Get all fields and properties of an object. - public Value[] GetMemberValues() + public IEnumerable GetMemberValues() { return GetMemberValues(BindingFlags.All); } @@ -298,10 +298,10 @@ namespace Debugger /// /// Limit to type, null for all types /// Get only members with certain flags - public Value[] GetMemberValues(BindingFlags bindingFlags) + public IEnumerable GetMemberValues(BindingFlags bindingFlags) { if (this.Type.IsClass || this.Type.IsValueType) { - return new List(GetObjectMembersEnum(bindingFlags)).ToArray(); + return this.GetPermanentReference().GetObjectMembersEnum(bindingFlags); } else { return new Value[0]; } @@ -313,6 +313,7 @@ namespace Debugger yield return this.GetFieldValue(field); } foreach(PropertyInfo property in this.Type.GetProperties(bindingFlags)) { + if (property.GetMethod.ParameterCount > 0) continue; yield return this.GetPropertyValue(property); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/GenericDictionary.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/GenericDictionary.cs index ee5d3bac76..0cdd064fcb 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/GenericDictionary.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/GenericDictionary.cs @@ -1,7 +1,7 @@ -// +// // // -// +// // $Revision$ // @@ -29,7 +29,7 @@ namespace Debugger.Tests { public partial class DebuggerTests { - [NUnit.Framework.Test, NUnit.Framework.Ignore] + [NUnit.Framework.Test] public void GenericDictionary() { StartTest("GenericDictionary.cs"); @@ -44,4 +44,225 @@ namespace Debugger.Tests { #endif #if EXPECTED_OUTPUT + + + + + mscorlib.dll (No symbols) + GenericDictionary.exe (Has symbols) + Break GenericDictionary.cs:21,4-21,40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #endif // EXPECTED_OUTPUT \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs index f21fb58410..c848359173 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs @@ -19,7 +19,8 @@ namespace Debugger.Tests.TestPrograms System.Threading.Thread t = new System.Threading.Thread(WaitForALongTime); t.Name = "Worker thread"; t.Start(); - System.Threading.Thread.Sleep(0); + // Wait for the thread to start + System.Threading.Thread.Sleep(500); System.Diagnostics.Debugger.Break(); } @@ -35,13 +36,13 @@ namespace Debugger.Tests { public partial class DebuggerTests { [NUnit.Framework.Test] - [NUnit.Framework.Ignore("Fails on .NET 4.0")] public void MainThreadExit() { StartTest("MainThreadExit.cs"); ObjectDump("ThreadsBeforeExit", process.Threads); process.AsyncContinue(); - System.Threading.Thread.Sleep(250); + // Wait for the main thread to exit + System.Threading.Thread.Sleep(500); process.Break(); ObjectDump("ThreadsAfterExit", process.Threads); process.Terminate(); @@ -59,7 +60,7 @@ namespace Debugger.Tests { mscorlib.dll (No symbols) MainThreadExit.exe (Has symbols) - Break MainThreadExit.cs:23,4-23,40 + Break MainThreadExit.cs:24,4-24,40 @@ -89,7 +90,7 @@ namespace Debugger.Tests { IsAtSafePoint="True" IsInValidState="True" IsMostRecentStackFrameNative="False" - MostRecentStackFrame="System.Threading.WaitHandle.WaitOne" + MostRecentStackFrame="System.Threading.WaitHandle.InternalWaitOne" MostRecentStackFrameWithLoadedSymbols="Debugger.Tests.TestPrograms.MainThreadExit.WaitForALongTime" Name="Worker thread" OldestStackFrame="System.Threading.ThreadHelper.ThreadStart" @@ -99,7 +100,7 @@ namespace Debugger.Tests { Suspended="False" /> - ForcedBreak MainThreadExit.cs:28,4-28,26 + ForcedBreak MainThreadExit.cs:29,4-29,26 @@ -129,7 +130,7 @@ namespace Debugger.Tests { IsAtSafePoint="True" IsInValidState="True" IsMostRecentStackFrameNative="False" - MostRecentStackFrame="System.Threading.WaitHandle.WaitOne" + MostRecentStackFrame="System.Threading.WaitHandle.InternalWaitOne" MostRecentStackFrameWithLoadedSymbols="Debugger.Tests.TestPrograms.MainThreadExit.WaitForALongTime" Name="Worker thread" OldestStackFrame="System.Threading.ThreadHelper.ThreadStart" diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ObjectValue.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ObjectValue.cs index 0d65e56435..2df6c69420 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ObjectValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ObjectValue.cs @@ -17,8 +17,8 @@ namespace Debugger.Tests.TestPrograms public class ObjectValue: BaseClass2 { - string privateField = "private"; - public string publicFiled = "public"; + string privateField = "c"; + public string publicFiled = "d"; public string PublicProperty { get { @@ -42,7 +42,7 @@ namespace Debugger.Tests { public partial class DebuggerTests { - [NUnit.Framework.Test, NUnit.Framework.Ignore] + [NUnit.Framework.Test] public void ObjectValue() { Value val = null; @@ -54,6 +54,7 @@ namespace Debugger.Tests { ObjectDump("val members", val.GetMemberValues()); process.Continue(); + val = process.SelectedStackFrame.GetLocalVariableValue("val"); ObjectDump("val", val); ObjectDump("val members", val.GetMemberValues()); @@ -64,4 +65,176 @@ namespace Debugger.Tests { #endif #if EXPECTED_OUTPUT + + + + + mscorlib.dll (No symbols) + ObjectValue.exe (Has symbols) + Break ObjectValue.cs:32,4-32,40 + + + + + + + + + + + + + + + + + + + + + Break ObjectValue.cs:34,4-34,40 + + + + + + + + + + + + + + + + + + + + + + + #endif // EXPECTED_OUTPUT \ No newline at end of file