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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de