Share via


ICorDebugILFrame3::GetReturnValueForILOffset 方法

获取一个“ICorDebugValue”对象,此对象封装函数的返回值。

语法

HRESULT GetReturnValueForILOffset(  
    ULONG32 ILoffset,
    [out] ICorDebugValue **ppReturnValue  
);  

参数

ILOffset
IL 偏移量。 请参阅“备注”部分。

ppReturnValue
一个指向“ICorDebugValue”接口对象的地址的指针,该对象提供函数调用的返回值的相关信息。

备注

此方法与 ICorDebugCode3::GetReturnValueLiveOffset 方法一起使用,以获取方法的返回值。 在返回值被忽略的方法中,这特别有用,如下面两个代码示例所示: 第一个示例调用 Int32.TryParse 方法,但忽略方法的返回值。

private static int ConvertNumericString(string s)
{
   int number;
   if (s.Trim().Length == 8)
      Int32.TryParse(s, System.Globalization.NumberStyles.HexNumber,
                     null, out number);
   else
      Int32.TryParse(s, out number);

   return number;
}
Private Function ConvertNumericString(s As String) As Integer
    Dim number As Integer
    If s.Trim().Length = 8 Then
        Int32.TryParse(s, System.Globalization.NumberStyles.HexNumber,
                       Nothing, number)
    Else
        Int32.TryParse(s, number)
    End If
    Return number
End Function

第二个示例演示了调试中更常见的问题。 方法在方法调用中用作参数,因此仅当调试程序逐步执行调用的方法时,才能访问其返回值。 在许多情况下,尤其是当外部库中定义了调用的方法时,无法做到这一点。

using System;

public class Example
{
   private static Random rnd;

   public static void Main()
   {
      rnd = new Random();
      Example ex = new Example();
      double value = MathLib.GetComputedValue(ex.GetInt(), ex.GetDouble());
      Console.WriteLine(value);
   }

   private int GetInt()
   {
      return rnd.Next(11, 100);
   }

   private double GetDouble()
   {
      return rnd.NextDouble();
   }
}
Public Module Example
    Dim rnd As Random

    Public Sub Main()
        rnd = New Random()
        Dim value As Double = MathLib.GetComputedValue(GetInt(), GetDouble())
        Console.WriteLine(value)
    End Sub

    Private Function GetInt() As Integer
        Return rnd.Next(11, 100)
    End Function

    Private Function GetDouble() As Double
        Return rnd.NextDouble()
    End Function
End Module

如果向 ICorDebugCode3::GetReturnValueLiveOffset 方法传递函数调用站点的 IL 偏移量,它将返回一个或多个本机偏移量。 然后,调试程序可以在函数中的这些本机偏移量上设置断点。 当调试程序命中其中一个断点时,你可传递已传递至此方法的同一 IL 偏移量来获取返回值。 然后,调试程序应清除它设置的所有断点。

警告

ICorDebugCode3::GetReturnValueLiveOffset MethodICorDebugILFrame3::GetReturnValueForILOffset 仅允许你获取引用类型的返回值信息。 不支持从值类型(即派生自 ValueType 的所有类型)检索返回值信息。

ILOffset 参数指定的 IL 偏移量应位于函数调用站点上,并且调试对象应在 ICorDebugCode3::GetReturnValueLiveOffset 方法为同一 IL 偏移量返回的本机偏移量设置的断点处停止。 如果调试对象没有在指定的 IL 偏移量的正确位置停止,那么 API 将失败。

如果函数调用不返回值,则 API 将失败。

ICorDebugILFrame3::GetReturnValueForILOffset 方法仅适用于基于 x86 的系统和 AMD64 系统。

要求

平台:请参阅系统要求

标头:CorDebug.idl、CorDebug.h

库:CorGuids.lib

.NET Framework 版本:自 4.5.1 起可用

请参阅