ICorDebugILFrame3::GetReturnValueForILOffset 方法
获取一个“ICorDebugValue”对象,此对象封装函数的返回值。
语法
HRESULT GetReturnValueForILOffset(
ULONG32 ILoffset,
[out] ICorDebugValue **ppReturnValue
);
参数
ILOffset
IL 偏移量。 请参阅“备注”部分。
ppReturnValue
一个指向“ICorDebugValue”接口对象的地址的指针,该对象提供函数调用的返回值的相关信息。
备注
此方法与 ICorDebugCode3::GetReturnValueLiveOffset 方法一起使用,以获取方法的返回值。 在返回值被忽略的方法中,这特别有用,如下面两个代码示例所示: 第一个示例调用 Int32.TryParse 方法,但忽略方法的返回值。
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
第二个示例演示了调试中更常见的问题。 方法在方法调用中用作参数,因此仅当调试程序逐步执行调用的方法时,才能访问其返回值。 在许多情况下,尤其是当外部库中定义了调用的方法时,无法做到这一点。
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
如果向 ICorDebugCode3::GetReturnValueLiveOffset 方法传递函数调用站点的 IL 偏移量,它将返回一个或多个本机偏移量。 然后,调试程序可以在函数中的这些本机偏移量上设置断点。 当调试程序命中其中一个断点时,你可传递已传递至此方法的同一 IL 偏移量来获取返回值。 然后,调试程序应清除它设置的所有断点。
警告
ICorDebugCode3::GetReturnValueLiveOffset Method 和 ICorDebugILFrame3::GetReturnValueForILOffset
仅允许你获取引用类型的返回值信息。 不支持从值类型(即派生自 ValueType 的所有类型)检索返回值信息。
ILOffset
参数指定的 IL 偏移量应位于函数调用站点上,并且调试对象应在 ICorDebugCode3::GetReturnValueLiveOffset 方法为同一 IL 偏移量返回的本机偏移量设置的断点处停止。 如果调试对象没有在指定的 IL 偏移量的正确位置停止,那么 API 将失败。
如果函数调用不返回值,则 API 将失败。
ICorDebugILFrame3::GetReturnValueForILOffset
方法仅适用于基于 x86 的系统和 AMD64 系统。
要求
平台:请参阅系统要求。
标头:CorDebug.idl、CorDebug.h
库:CorGuids.lib
.NET Framework 版本:自 4.5.1 起可用
请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈