The crash happened whenever I stepped in line that included reference to a member of the generic type in the form of type B as described below.
I think it is related to generic sub-classing, since I had the following class structure that #D couldn't debug:
public class A<T>
{
T t;
public A (T t) { this.t = t; }
public virtual T Value { get { return t; } set { throw exception } }
}
public class B<T> : A<T>
{
public B (T t) : base (t) {}
public override T Value { set { t = value; } }
}
SharpDevelop Version : 2.1.0.2038
.NET Version : 2.0.50727.42
OS Version : Microsoft Windows NT 5.1.2600 Service Pack 2
Current culture : English (United States) (en-US)
Working Set Memory : 105336kb
GC Heap Memory : 31759kb
Exception thrown:
Debugger.DebuggerException: Superclass not found
at Debugger.ObjectValueClass.GetSuperClass(Process process, ICorDebugClass currClass)
at Debugger.ObjectValueClass.get_BaseClass()
at Debugger.ObjectValue.<get_Classes>d__0.MoveNext()
at Debugger.ObjectValue.GetClass(String type)
at Debugger.ObjectValue..ctor(Value value)
at Debugger.Value.CreateValue()
at Debugger.Value.get_ValueProxy()
at Debugger.Variable.get_ValueProxy()
at ICSharpCode.SharpDevelop.Gui.Pads.TreeListViewDebuggerItem.Update()
at ICSharpCode.SharpDevelop.Gui.Pads.TreeListViewDebuggerItem..ctor(Variable variable)
at ICSharpCode.SharpDevelop.Gui.Pads.LocalVarPad.AddVariableCollectionToTree(VariableCollection varCollection, TreeListViewItemCollection tree)
at ICSharpCode.SharpDevelop.Gui.Pads.LocalVarPad.RefreshPad()
at ICSharpCode.SharpDevelop.Gui.Pads.LocalVarPad.debuggedProcess_DebuggeeStateChanged(Object sender, ProcessEventArgs e)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at Debugger.Process.OnDebuggeeStateChanged()
at Debugger.Process.Pause(Boolean debuggeeStateChanged)
at Debugger.ManagedCallback.ExitCallback_Paused()
at Debugger.ManagedCallback.StepComplete(ICorDebugAppDomain pAppDomain, ICorDebugThread pThread, ICorDebugStepper pStepper, CorDebugStepReason reason)
at Debugger.ManagedCallbackProxy.<>c__DisplayClass1.<StepComplete>b__0()
at Debugger.MTA2STA.<>c__DisplayClass3.<EnqueueCall>b__0()
at Debugger.MTA2STA.PerformAllCalls()
at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbacks()