本文整理汇总了C#中ISymUnmanagedReader.GetMethod方法的典型用法代码示例。如果您正苦于以下问题:C# ISymUnmanagedReader.GetMethod方法的具体用法?C# ISymUnmanagedReader.GetMethod怎么用?C# ISymUnmanagedReader.GetMethod使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ISymUnmanagedReader
的用法示例。
在下文中一共展示了ISymUnmanagedReader.GetMethod方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetILOffsetRangesForEachLine
public static int[][] GetILOffsetRangesForEachLine(
ISymUnmanagedReader symReader,
int methodToken,
ISymUnmanagedDocument document,
int minLine, int maxLine)
{
Assert.True(minLine >= 1);
Assert.True(maxLine >= minLine);
var result = new List<int[]>();
ISymUnmanagedMethod method;
Assert.Equal(HResult.S_OK, symReader.GetMethod(methodToken, out method));
for (int line = minLine; line <= maxLine; line++)
{
int count;
Assert.Equal(HResult.S_OK, method.GetRanges(document, line, 0, 0, out count, null));
int count2;
int[] ranges = new int[count];
Assert.Equal(HResult.S_OK, method.GetRanges(document, line, 0, count, out count2, ranges));
Assert.Equal(count, count2);
result.Add(ranges);
}
return result.ToArray();
}
示例2: ValidateNoMethodExtent
public static void ValidateNoMethodExtent(ISymUnmanagedReader symReader, int methodDef, string documentName)
{
ISymUnmanagedMethod method;
Assert.Equal(HResult.S_OK, symReader.GetMethod(methodDef, out method));
ISymUnmanagedDocument document;
Assert.Equal(HResult.S_OK, symReader.GetDocument(documentName, default(Guid), default(Guid), default(Guid), out document));
int actualMinLine, actualMaxLine;
Assert.Equal(HResult.E_FAIL, ((ISymEncUnmanagedMethod)method).GetSourceExtentInDocument(document, out actualMinLine, out actualMaxLine));
}
示例3: GetILOffsetForEachLine
public static int[] GetILOffsetForEachLine(
ISymUnmanagedReader symReader,
int methodToken,
ISymUnmanagedDocument document,
int minLine, int maxLine)
{
Assert.True(minLine >= 1);
Assert.True(maxLine >= minLine);
var result = new List<int>();
ISymUnmanagedMethod method;
Assert.Equal(HResult.S_OK, symReader.GetMethod(methodToken, out method));
for (int line = minLine; line <= maxLine; line++)
{
int offset;
int hr = method.GetOffset(document, line, 0, out offset);
if (hr != HResult.S_OK)
{
Assert.Equal(HResult.E_FAIL, hr);
offset = int.MaxValue;
}
result.Add(offset);
}
return result.ToArray();
}
示例4: ValidateAsyncMethod
public static void ValidateAsyncMethod(ISymUnmanagedReader symReader, int moveNextMethodToken, int kickoffMethodToken, int catchHandlerOffset, int[] yieldOffsets, int[] resumeOffsets)
{
ISymUnmanagedMethod method;
Assert.Equal(HResult.S_OK, symReader.GetMethod(moveNextMethodToken, out method));
var asyncMethod = (ISymUnmanagedAsyncMethod)method;
bool isAsync;
Assert.Equal(HResult.S_OK, asyncMethod.IsAsyncMethod(out isAsync));
Assert.True(isAsync);
int actualKickoffMethodToken;
Assert.Equal(HResult.S_OK, asyncMethod.GetKickoffMethod(out actualKickoffMethodToken));
Assert.Equal(kickoffMethodToken, actualKickoffMethodToken);
bool hasCatchHandlerILOffset;
Assert.Equal(HResult.S_OK, asyncMethod.HasCatchHandlerILOffset(out hasCatchHandlerILOffset));
Assert.Equal(catchHandlerOffset >= 0, hasCatchHandlerILOffset);
int actualCatchHandlerOffset;
if (hasCatchHandlerILOffset)
{
Assert.Equal(HResult.S_OK, asyncMethod.GetCatchHandlerILOffset(out actualCatchHandlerOffset));
Assert.Equal(catchHandlerOffset, actualCatchHandlerOffset);
}
else
{
Assert.Equal(HResult.E_UNEXPECTED, asyncMethod.GetCatchHandlerILOffset(out actualCatchHandlerOffset));
}
int count, count2;
Assert.Equal(HResult.S_OK, asyncMethod.GetAsyncStepInfoCount(out count));
Assert.Equal(yieldOffsets.Length, count);
Assert.Equal(resumeOffsets.Length, count);
var actualYieldOffsets = new int[count];
var actualResumeOffsets = new int[count];
var actualResumeMethods = new int[count];
Assert.Equal(HResult.S_OK, asyncMethod.GetAsyncStepInfo(count, out count2, actualYieldOffsets, actualResumeOffsets, actualResumeMethods));
AssertEx.Equal(yieldOffsets, actualYieldOffsets);
AssertEx.Equal(resumeOffsets, actualResumeOffsets);
foreach (int actualResumeMethod in actualResumeMethods)
{
Assert.Equal(moveNextMethodToken, actualResumeMethod);
}
}
示例5: GetLocalVariableNamesForMethod
//
// Recursively scan the scopes for a method stored in a PDB and gather the local slots
// and names for all of them. This assumes a CSC-like compiler that doesn't re-use
// local slots in the same method across scopes.
//
public IEnumerable<LocalVariable> GetLocalVariableNamesForMethod(ISymUnmanagedReader reader, int methodToken)
{
ISymUnmanagedMethod symbolMethod;
if (reader.GetMethod(methodToken, out symbolMethod) < 0)
return null;
ISymUnmanagedScope rootScope;
ThrowExceptionForHR(symbolMethod.GetRootScope(out rootScope));
var variables = new List<LocalVariable>();
ProbeScopeForLocals(variables, rootScope);
return variables;
}
示例6: GetSequencePointsForMethod
public IEnumerable<ILSequencePoint> GetSequencePointsForMethod(ISymUnmanagedReader reader, int methodToken)
{
ISymUnmanagedMethod symbolMethod;
if (reader.GetMethod(methodToken, out symbolMethod) < 0)
yield break;
int count;
ThrowExceptionForHR(symbolMethod.GetSequencePointCount(out count));
ISymUnmanagedDocument[] docs = new ISymUnmanagedDocument[count];
int[] lineNumbers = new int[count];
int[] ilOffsets = new int[count];
ThrowExceptionForHR(symbolMethod.GetSequencePoints(count, out count, ilOffsets, docs, lineNumbers, null, null, null));
for (int i = 0; i < count; i++)
{
if (lineNumbers[i] == 0xFEEFEE)
continue;
yield return new ILSequencePoint() { Document = GetUrl(docs[i]), LineNumber = lineNumbers[i], Offset = ilOffsets[i] };
}
}
示例7: getDefinitions
/// <summary>
/// Get definitions of local variables in method.
/// </summary>
/// <param name="tkMethod">Token of method with desired variables.</param>
/// <param name="reader">File containing symbols of desired method.</param>
/// <returns>List of definitions of local variables in method.</returns>
private List<LocalVarDefinition> getDefinitions(uint tkMethod, ISymUnmanagedReader reader)
{
List<LocalVarDefinition> definitions = new List<LocalVarDefinition>();
int start = 0;
getDefinitionsForScope(reader.GetMethod(tkMethod).GetRootScope(), ref start, definitions);
return definitions;
}