Partager via


ICorDebugILFrame3::GetReturnValueForILOffset, méthode

Obtient un objet « ICorDebugValue » qui encapsule la valeur renvoyée d’une fonction.

Syntaxe

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

Paramètres

ILOffset
Décalage IL. Consultez la section Notes.

ppReturnValue
Pointeur désignant l’adresse d’un objet d’interface « ICorDebugValue » qui fournit des informations sur la valeur renvoyée d’un appel de fonction.

Notes

Cette méthode est utilisée avec la méthode ICorDebugCode3::GetReturnValueLiveOffset pour obtenir la valeur renvoyée d’une méthode. Elle est particulièrement utile dans le cas de méthodes dont les valeurs renvoyées sont ignorées, comme dans les deux exemples de code suivants. Le premier exemple appelle la méthode Int32.TryParse, mais ignore la valeur renvoyée de la méthode.

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

Le deuxième exemple illustre un problème beaucoup plus courant en matière de débogage. Étant donné qu’une méthode est utilisée comme argument dans un appel de méthode, sa valeur renvoyée n’est accessible que lorsque le débogueur suit la méthode appelée. Dans de nombreux cas, notamment lorsque la méthode appelée est définie dans une bibliothèque externe, cela n’est pas possible.

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 vous transmettez la méthode ICorDebugCode3::GetReturnValueLiveOffset à un site d’appel de fonction avec le décalage IL, elle renvoie un ou plusieurs décalages natifs. Le débogueur peut alors définir des points d’arrêt sur ces décalages natifs dans la fonction. Lorsque le débogueur atteint l’un des points d’arrêt, vous pouvez transmettre le décalage IL que vous avez transmis à cette méthode pour obtenir la valeur renvoyée. Le débogueur doit alors effacer tous les points d’arrêt qu’il a définis.

Avertissement

La méthode ICorDebugCode3::GetReturnValueLiveOffset et les méthodes ICorDebugILFrame3::GetReturnValueForILOffset vous permettent d’obtenir des informations sur la valeur renvoyée pour les types de référence uniquement. La récupération d’informations sur la valeur renvoyée à partir de types valeur (autrement dit, tous les types qui dérivent de ValueType) n’est pas prise en charge.

Le décalage IL spécifié par le paramètre ILOffset doit se trouver sur un site d’appel de fonction, et l’élément débogué doit être arrêté à un point d’arrêt défini sur le décalage natif renvoyé par la méthode ICorDebugCode3::GetReturnValueLiveOffset pour le même décalage IL. Si l’élément débogué n’est pas arrêté à l’emplacement approprié pour le décalage IL spécifié, l’API échoue.

Si l’appel de fonction ne renvoie pas de valeur, l’API échoue.

La méthode ICorDebugILFrame3::GetReturnValueForILOffset est uniquement disponible sur les systèmes x86 et AMD64.

Spécifications

Plateformes : Consultez Configuration requise.

En-tête : CorDebug.idl, CorDebug.h

Bibliothèque : CorGuids.lib

Versions de .NET Framework : Disponibles depuis la version 4.5.1

Voir aussi