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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de