/// <summary> /// Function tries to resolve the breakpoint from breakpoint description. /// </summary> /// <param name="functionBreakpoint">A breakpoint object.</param> /// <param name="managedModule">A module that the breakpoint should be resolved at.</param> /// <param name="managedFunction">A function that is resolved from the breakpoint description.</param> /// <param name="ILoffset">An il offset within a function resolved from the breakpoint description.</param> /// <returns>true if breakpoint was successfully resolved</returns> /// <remarks> /// Resolved is usually called for every loaded module. /// </remarks> public bool ResolveLocation(MDbgFunctionBreakpoint functionBreakpoint, MDbgModule managedModule, out List <MDbgFunction> managedFunction, out int ILoffset) { Debug.Assert(m_lineNo > 0 && m_file.Length > 0); managedFunction = null; ILoffset = 0; if (managedModule.SymReader == null) { // no symbols for current module, skip it. return(false); } foreach (ISymbolDocument doc in managedModule.SymReader.GetDocuments()) { if (String.Compare(doc.URL, m_file, true, CultureInfo.InvariantCulture) == 0 || String.Compare(System.IO.Path.GetFileName(doc.URL), m_file, true, CultureInfo.InvariantCulture) == 0) { int lineNo = 0; try { lineNo = doc.FindClosestLine(m_lineNo); } catch (System.Runtime.InteropServices.COMException e) { if (e.ErrorCode == (int)HResult.E_FAIL) { // we continue, because this location is not in this file, let's // keep trying to search for next file. continue; } } ISymbolMethod symMethod = managedModule.SymReader.GetMethodFromDocumentPosition(doc, lineNo, 0); managedFunction = new List <MDbgFunction>(); var func = managedModule.GetFunction(symMethod.Token.GetToken()); managedFunction.Add(func); ILoffset = func.GetIPFromPosition(doc, lineNo); // If this IL if (ILoffset == -1) { return(false); } Debug.Assert(ILoffset != -1); return(true); } } managedFunction = null; ILoffset = -1; return(false); }
/// <summary> /// Function tries to resolve the breakpoint from breakpoint description. /// </summary> /// <param name="functionBreakpoint">A breakpoint object.</param> /// <param name="managedModule">A module that the breakpoint should be resolved at.</param> /// <param name="managedFunction">A function that is resolved from the breakpoint description.</param> /// <param name="ilOffset">An il offset within a function resolved from the breakpoint description.</param> /// <returns>true if breakpoint was successfully resolved</returns> /// <remarks> /// Resolved is usually called for every loaded module. /// </remarks> public bool ResolveLocation(MDbgFunctionBreakpoint functionBreakpoint, MDbgModule managedModule, out MDbgFunction managedFunction, out int ilOffset) { managedFunction = null; ilOffset = -1; // check if the function is from the module we specified. if (m_function.Module != managedModule) { return(false); } managedFunction = m_function; ilOffset = m_ILoffset; return(true); }
/// <summary> /// Function tries to resolve the breakpoint from breakpoint description. /// </summary> /// <param name="functionBreakpoint">A breakpoint object.</param> /// <param name="managedModule">A module that the breakpoint should be resolved at.</param> /// <param name="managedFunction">A function that is resolved from the breakpoint description.</param> /// <param name="ilOffset">An il offset within a function resolved from the breakpoint description.</param> /// <returns>true if breakpoint was successfully resolved</returns> /// <remarks> /// Resolved is usually called for every loaded module. /// </remarks> public bool ResolveLocation(MDbgFunctionBreakpoint functionBreakpoint, MDbgModule managedModule, out MDbgFunction managedFunction, out int ilOffset) { managedFunction = null; ilOffset = m_ILoffset; if (m_moduleName != null && m_moduleName.Length > 0) { if (!managedModule.MatchesModuleName(m_moduleName)) { return(false); } } managedFunction = functionBreakpoint.m_breakpointCollection.m_process.ResolveFunctionName(managedModule, m_className, m_methodName); return(managedFunction != null); }
/// <summary> /// Function tries to resolve the breakpoint from breakpoint description. /// </summary> /// <param name="functionBreakpoint">A breakpoint object.</param> /// <param name="managedModule">A module that the breakpoint should be resolved at.</param> /// <param name="managedFunction">A function that is resolved from the breakpoint description.</param> /// <param name="ILoffset">An il offset within a function resolved from the breakpoint description.</param> /// <returns>true if breakpoint was successfully resolved</returns> /// <remarks> /// Resolved is usually called for every loaded module. /// </remarks> public bool ResolveLocation(MDbgFunctionBreakpoint functionBreakpoint, MDbgModule managedModule, out MDbgFunction managedFunction, out int ILoffset) { Debug.Assert(m_lineNo > 0 && m_file.Length > 0); managedFunction = null; ILoffset = 0; if (managedModule.SymReader == null) // no symbols for current module, skip it. return false; foreach (ISymbolDocument doc in managedModule.SymReader.GetDocuments()) { if (String.Compare(doc.URL, m_file, true, CultureInfo.InvariantCulture) == 0 || String.Compare(System.IO.Path.GetFileName(doc.URL), m_file, true, CultureInfo.InvariantCulture) == 0) { int lineNo = 0; try { lineNo = doc.FindClosestLine(m_lineNo); } catch (System.Runtime.InteropServices.COMException e) { if (e.ErrorCode == (int)HResult.E_FAIL) // we continue, because this location is not in this file, let's // keep trying to search for next file. continue; } ISymbolMethod symMethod = managedModule.SymReader.GetMethodFromDocumentPosition(doc, lineNo, 0); managedFunction = managedModule.GetFunction(symMethod.Token.GetToken()); ILoffset = managedFunction.GetIPFromPosition(doc, lineNo); // If this IL if (ILoffset == -1) { return false; } Debug.Assert(ILoffset != -1); return true; } } managedFunction = null; ILoffset = -1; return false; }
/// <summary> /// Function tries to resolve the breakpoint from breakpoint description. /// </summary> /// <param name="functionBreakpoint">A breakpoint object.</param> /// <param name="managedModule">A module that the breakpoint should be resolved at.</param> /// <param name="managedFunction">A function that is resolved from the breakpoint description.</param> /// <param name="ilOffset">An il offset within a function resolved from the breakpoint description.</param> /// <returns>true if breakpoint was successfully resolved</returns> /// <remarks> /// Resolved is usually called for every loaded module. /// </remarks> public bool ResolveLocation(MDbgFunctionBreakpoint functionBreakpoint, MDbgModule managedModule, out MDbgFunction managedFunction, out int ilOffset) { managedFunction = null; ilOffset = -1; // check if the function is from the module we specified. if (m_function.Module != managedModule) return false; managedFunction = m_function; ilOffset = m_ILoffset; return true; }
/// <summary> /// Function tries to resolve the breakpoint from breakpoint description. /// </summary> /// <param name="functionBreakpoint">A breakpoint object.</param> /// <param name="managedModule">A module that the breakpoint should be resolved at.</param> /// <param name="managedFunction">A function that is resolved from the breakpoint description.</param> /// <param name="ilOffset">An il offset within a function resolved from the breakpoint description.</param> /// <returns>true if breakpoint was successfully resolved</returns> /// <remarks> /// Resolved is usually called for every loaded module. /// </remarks> public bool ResolveLocation(MDbgFunctionBreakpoint functionBreakpoint, MDbgModule managedModule, out MDbgFunction managedFunction, out int ilOffset) { managedFunction = null; ilOffset = m_ILoffset; if (m_moduleName != null && m_moduleName.Length > 0) { if (!managedModule.MatchesModuleName(m_moduleName)) return false; } managedFunction = functionBreakpoint.m_breakpointCollection.m_process.ResolveFunctionName(managedModule, m_className, m_methodName); return managedFunction != null; }