Browse Source

fix step into properties getters/setters

pull/191/merge
Eusebiu Marcu 14 years ago
parent
commit
7e9fdb396a
  1. 4
      Debugger/ILSpy.Debugger/Services/Debugger/WindowsDebugger.cs
  2. 23
      Debugger/ILSpy.Debugger/Services/ExtensionMethods.cs
  3. 9
      ILSpy/TextView/DecompilerTextView.cs

4
Debugger/ILSpy.Debugger/Services/Debugger/WindowsDebugger.cs

@ -810,12 +810,12 @@ namespace ICSharpCode.ILSpy.Debugger.Services
DebuggerService.JumpToCurrentLine(memberReference, line, 0, line, 0); DebuggerService.JumpToCurrentLine(memberReference, line, 0, line, 0);
} }
else { else {
StepIntoFrame(frame); StepIntoUnknownFrame(frame);
} }
} }
} }
void StepIntoFrame(StackFrame frame) void StepIntoUnknownFrame(StackFrame frame)
{ {
string debuggeeVersion = frame.MethodInfo.DebugModule.Process.DebuggeeVersion.Substring(1, 3); // should retrieve 2.0, 3.0, 4.0 string debuggeeVersion = frame.MethodInfo.DebugModule.Process.DebuggeeVersion.Substring(1, 3); // should retrieve 2.0, 3.0, 4.0
var debugType = (DebugType)frame.MethodInfo.DeclaringType; var debugType = (DebugType)frame.MethodInfo.DeclaringType;

23
Debugger/ILSpy.Debugger/Services/ExtensionMethods.cs

@ -409,17 +409,14 @@ namespace ICSharpCode.ILSpy.Debugger.Services
/// <returns></returns> /// <returns></returns>
public static MemberReference GetMemberByToken(this TypeDefinition type, int memberToken) public static MemberReference GetMemberByToken(this TypeDefinition type, int memberToken)
{ {
if (type.HasMethods) {
foreach (var member in type.Methods) {
if (member.MetadataToken.ToInt32() == memberToken)
return member;
}
}
if (type.HasProperties) { if (type.HasProperties) {
foreach (var member in type.Properties) { foreach (var member in type.Properties) {
if (member.MetadataToken.ToInt32() == memberToken) if (member.MetadataToken.ToInt32() == memberToken)
return member; return member;
if (member.GetMethod != null && member.GetMethod.MetadataToken.ToInt32() == memberToken)
return member;
if (member.SetMethod != null && member.SetMethod.MetadataToken.ToInt32() == memberToken)
return member;
} }
} }
@ -427,6 +424,18 @@ namespace ICSharpCode.ILSpy.Debugger.Services
foreach (var member in type.Events) { foreach (var member in type.Events) {
if (member.MetadataToken.ToInt32() == memberToken) if (member.MetadataToken.ToInt32() == memberToken)
return member; return member;
if (member.AddMethod != null && member.AddMethod.MetadataToken.ToInt32() == memberToken)
return member;
if (member.RemoveMethod != null && member.RemoveMethod.MetadataToken.ToInt32() == memberToken)
return member;
if (member.InvokeMethod != null && member.InvokeMethod.MetadataToken.ToInt32() == memberToken)
return member;
}
}
if (type.HasMethods) {
foreach (var member in type.Methods) {
if (member.MetadataToken.ToInt32() == memberToken)
return member;
} }
} }

9
ILSpy/TextView/DecompilerTextView.cs

@ -392,11 +392,12 @@ namespace ICSharpCode.ILSpy.TextView
// show the currentline marker // show the currentline marker
int token = DebugData.DebugStepInformation.Item1; int token = DebugData.DebugStepInformation.Item1;
int ilOffset = DebugData.DebugStepInformation.Item2; int ilOffset = DebugData.DebugStepInformation.Item2;
bool isMatch; int line;
var map = DebugData.CodeMappings[token].GetInstructionByTokenAndOffset(token, ilOffset, out isMatch); MemberReference member;
int line = map.SourceCodeLine; DebugData.CodeMappings[token].GetInstructionByTokenAndOffset(token, ilOffset, out member, out line);
DebuggerService.RemoveCurrentLineMarker(); DebuggerService.RemoveCurrentLineMarker();
DebuggerService.JumpToCurrentLine(DebugData.DebugStepInformation.Item3, line, 0, line, 0); DebuggerService.JumpToCurrentLine(member, line, 0, line, 0);
// create marker // create marker
var bm = CurrentLineBookmark.Instance; var bm = CurrentLineBookmark.Instance;

Loading…
Cancel
Save