Browse Source

Make sure that we don't crash if the ILVariable original value is null or the index is out of range.

pull/191/merge
Eusebiu Marcu 15 years ago
parent
commit
05cfd77d1e
  1. 3
      Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
  2. 6
      Debugger/ILSpy.Debugger/Models/TreeModel/ExpressionNode.cs

3
Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs

@ -471,7 +471,8 @@ namespace Debugger.MetaData @@ -471,7 +471,8 @@ namespace Debugger.MetaData
corVal = context.CorILFrame.GetLocalVariable((uint)varIndex);
} catch (COMException e) {
if ((uint)e.ErrorCode == 0x80131304) throw new GetValueException("Unavailable in optimized code");
throw;
// show the message in case of bad index
throw new GetValueException(e.Message);
}
return new Value(context.AppDomain, corVal);
}

6
Debugger/ILSpy.Debugger/Models/TreeModel/ExpressionNode.cs

@ -163,12 +163,12 @@ namespace ILSpy.Debugger.Models.TreeModel @@ -163,12 +163,12 @@ namespace ILSpy.Debugger.Models.TreeModel
IEnumerable<ILVariable> list;
if (ILAstBuilder.MemberLocalVariables.TryGetValue(token, out list)) {
var variable = list.FirstOrDefault(v => v.Name == targetName);
if (variable != null) {
if (variable != null && variable.OriginalVariable != null) {
if (expression is MemberReferenceExpression) {
var memberExpression = (MemberReferenceExpression)expression;
memberExpression.Target.AddAnnotation(new int[] { variable.OriginalVariable.Index });
memberExpression.Target.AddAnnotation(new [] { variable.OriginalVariable.Index });
} else {
expression.AddAnnotation(new int[] { variable.OriginalVariable.Index });
expression.AddAnnotation(new [] { variable.OriginalVariable.Index });
}
}
}

Loading…
Cancel
Save