Método ICorDebugILFrame3::GetReturnValueForILOffset

Obtém um objeto "ICorDebugValue" que encapsula o valor de retorno de uma função.

Sintaxe

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

Parâmetros

ILOffset
O deslocamento IL. Consulte a seção Comentários.

ppReturnValue
Um ponteiro para o endereço de um objeto de interface "ICorDebugValue" que fornece informações sobre o valor de retorno de uma chamada de função.

Comentários

Esse método é usado junto com o método ICorDebugCode3::GetReturnValueLiveOffset para obter o valor de retorno de um método. É particularmente útil no caso de métodos cujos valores de retorno são ignorados, como nos dois exemplos de código a seguir. O primeiro exemplo chama o Int32.TryParse método, mas ignora o valor de retorno do método.

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

O segundo exemplo ilustra um problema muito mais comum na depuração. Como um método é usado como argumento em uma chamada de método, seu valor de retorno é acessível somente quando o depurador percorre o método chamado. Em muitos casos, principalmente quando o método chamado é definido em uma biblioteca externa, isso não é possível.

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

Se você passar o método ICorDebugCode3::GetReturnValueLiveOffset um deslocamento de IL para um site de chamada de função, ele retornará um ou mais deslocamentos nativos. O depurador pode definir pontos de interrupção nesses deslocamentos nativos na função. Quando o depurador atinge um dos pontos de interrupção, você pode passar o mesmo deslocamento de IL que passou para esse método para obter o valor de retorno. O depurador deve então limpar todos os pontos de interrupção que ele definiu.

Aviso

O método e os métodos ICorDebugCode3::GetReturnValueLiveOffsetICorDebugILFrame3::GetReturnValueForILOffset permitem que você obtenha informações de valor de retorno apenas para tipos de referência. Não há suporte para recuperar informações de valor de retorno de tipos de valor (ou seja, todos os tipos que derivam de ValueType).

O deslocamento de IL especificado pelo ILOffset parâmetro deve estar em um site de chamada de função e o depurado deve ser interrompido em um ponto de interrupção definido no deslocamento nativo retornado pelo método ICorDebugCode3::GetReturnValueLiveOffset para o mesmo deslocamento de IL. Se o depurado não for interrompido no local correto para o deslocamento de IL especificado, a API falhará.

Se a chamada de função não retornar um valor, a API falhará.

O ICorDebugILFrame3::GetReturnValueForILOffset método está disponível apenas em sistemas baseados em x86 e AMD64.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorDebug.idl, CorDebug.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: Disponíveis desde a versão 4.5.1

Confira também