internal void UpdateBreakpointsInModule(DebugModule module) { BreakpointMethod[] copy = new BreakpointMethod[_unresolved.Count]; _unresolved.CopyTo(copy); foreach (var bp in copy) { var methods = module.ResolveAllFunctionName(bp.ClassName, bp.MethodName); if (methods == null) continue; // Sorry about this null. TODO: Refactor. foreach (var method in methods) { Logger.WriteLine("Setting breakpoint at {0}.{1}", bp.ClassName, bp.MethodName); var token = (uint)method.MetaData.MetadataToken; if (_breakpointsMap.ContainsKey(token)) continue; var bpWrapper = method.SetBreakpoint(); bp.Breakpoint = bpWrapper.Interface; _breakpointsMap[token] = bp; } } }
private void ResolveNewMscrolibMethods(DebugModule mscorlib) { var assemblyLoadMethods = mscorlib.ResolveAllFunctionName("System.Reflection.Assembly", "Load"); if (assemblyLoadMethods != null) { foreach (var method in assemblyLoadMethods) { var methodParams = method.MetaData.GetParameters(); if (methodParams.Length == 1 && methodParams[0].Name == "rawAssembly") { _loadAssemblyMethod = method; _byteCorType = mscorlib.FindType("System.Byte").GetDebugType(); Logger.WriteLine("Assembly.Load(byte[] rawAssembly) - method address resolved."); } } } else { Logger.WriteLine("Could not find Assembly.Load() method in mscorlib. Something is wrong."); } }