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