Compartir a través de


ICorDebugILFrame3::GetReturnValueForILOffset (Método)

Obtiene un objeto "ICorDebugValue" que encapsula el valor devuelto de una función.

Sintaxis

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

Parámetros

ILOffset
Desplazamiento IL. Consulte la sección Comentarios.

ppReturnValue
Puntero a la dirección de un objeto de interfaz "ICorDebugValue" que proporciona información sobre el valor devuelto de una llamada de función.

Comentarios

Este método se utiliza junto con el método ICorDebugCode3::GetReturnValueLiveOffset para obtener el valor devuelto de un método. Resulta especialmente útil en el caso de los métodos cuyos valores devueltos se omiten, como en los dos ejemplos de código siguientes. El primer ejemplo llama al método Int32.TryParse, pero omite el valor devuelto.

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

El segundo ejemplo muestra un problema mucho más común de depuración. Dado que se usa un método como argumento en una llamada al método, solo se puede tener acceso al valor devuelto cuando el depurador recorre el método llamado. En muchos casos, especialmente cuando el método al que se llama se define en una biblioteca externa, eso no es posible.

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

Si pasa el método ICorDebugCode3::GetReturnValueLiveOffset y el desplazamiento IL al sitio de una llamada de función, devuelve uno o varios desplazamientos nativos. El depurador puede establecer puntos de interrupción en estos desplazamientos nativos en la función. Cuando el depurador llega a uno de los puntos de interrupción, podrá pasar el mismo desplazamiento IL que pasó a este método para obtener el valor devuelto. A continuación, el depurador debe borrar todos los puntos de interrupción que estableció.

Advertencia

Los métodos ICorDebugCode3::GetReturnValueLiveOffset Method y ICorDebugILFrame3::GetReturnValueForILOffset permiten obtener información del valor devuelto solo para los tipos de referencia. La recuperación de información de valor devuelto de tipos de valor (es decir, todos los tipos derivados de ValueType) no se admite.

El desplazamiento IL especificado por el parámetro ILOffset debe estar en un sitio de llamada de función y el elemento depurado debe detenerse en un punto de interrupción establecido en el desplazamiento nativo devuelto por el método ICorDebugCode3::GetReturnValueLiveOffset para el mismo desplazamiento IL. Si el código que se está depurando no se detiene en la ubicación correcta para el desplazamiento IL especificado, se producirá un error en la API.

Si la llamada de función no devuelve un valor, se producirá un error en la API.

El método ICorDebugILFrame3::GetReturnValueForILOffset solo está disponible en los sistemas basados en x86 y AMD64.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: CorDebug.idl, CorDebug.h

Biblioteca: CorGuids.lib

Versiones de .NET Framework: está disponible desde la versión 4.5.1

Consulte también