Метод 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 позволяют получать сведения о возвращаемом значении только для ссылочных типов.ICorDebugILFrame3::GetReturnValueForILOffset Получение возвращаемых сведений о значении из типов значений (т. е. всех типов, производных от ValueType) не поддерживается.

Смещение IL, указанное ILOffset параметром , должно находиться на сайте вызова функции, а отладчик должен быть остановлен в точке останова, заданной в собственном смещении, возвращаемом методом ICorDebugCode3::GetReturnValueLiveOffset для того же смещения IL. Если отладчик не остановлен в правильном расположении для указанного смещения IL, API завершится ошибкой.

Если вызов функции не возвращает значение, API завершится ошибкой.

Метод ICorDebugILFrame3::GetReturnValueForILOffset доступен только в системах x86 и AMD64.

Требования

Платформы: см. раздел Требования к системе.

Заголовок: CorDebug.idl, CorDebug.h

Библиотека: CorGuids.lib

версии платформа .NET Framework: доступно с версии 4.5.1

См. также раздел