- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
考虑以下 C# 代码:
class Program
{
static public void Print(string toPrint)
{
Console.WriteLine(toPrint);
}
static void Main(string[] args)
{
Type program = typeof(Program);
MethodInfo methodInfo = program.GetMethod("Print", BindingFlags.Static | BindingFlags.Public);
methodInfo.Invoke(null, new object[] { "a" });
}
}
当我在 Visual Studio 2008 或 Visual Studio 2008 中运行它并命中我在“Print”方法中放置的断点时,我在调用堆栈窗口中得到以下信息:
ConsoleApplication4.exe!ConsoleApplication4.Program.Print(string toPrint)
[Native to Managed Transition]
[Managed to Native Transition]
ConsoleApplication4.exe!ConsoleApplication4.Program.Main(string[] args)
为什么 RuntimeMethodInfo.Invoke
没有出现在我的调用堆栈中?毕竟,它是一种托管方法,那么为什么我看不到它所期望的那样呢?
另外,一般来说,这里的规则是什么?我的调用堆栈中可能缺少哪些托管方法?
最佳答案
原因是该方法实际上不是托管方法。 RunTimeMethodInfo.Invoke
最终将解析为 RuntimeMethodHandle._InvokeMethodFast
,它被标记为 MethodImplOptions.InternalCall
。这意味着该调用实际上是直接在 CLR 中作为助手实现的。 .
就不会出现在您的调用堆栈中的一般规则而言:
Just My Code
(这是默认设置),几乎所有您没有编写的内容都会在调用堆栈中显示为[External Code]
.Native to Managed
和Managed to Native
转换。DebuggerHidden
的确切规则,尤其是与“仅我的代码”方法结合使用时,但我没有必要期望它们出现在调用堆栈中。如果您想要完整地查看原始调用堆栈,那么您需要执行以下操作。
仅我的代码
关于c# - 为什么 RuntimeMethodInfo.Invoke 没有出现在我的 Visual Studio 调试器调用堆栈中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6643647/
让我们开始: using System; public class Program { class A { public virtual void Do() { }
动态生成类型并调用 TypeBuilder.CreateType 后,我想创建一个指向新类型中方法的委托(delegate)。但是如果我使用像这样的代码 loadedType = typeBuilde
考虑以下 C# 代码: class Program { static public void Print(string toPrint) { Console.Write
假设我在 C# 中有以下类: public class B : A { public Int32 B_ID; public String B_Value; public Int
使用 nuget 安装程序安装了 WinSCP .net。 Visual Studio 2013 SSIS 投标 2012 项目引用正确 - 指向已安装的 DLL 项目包含一个脚本,它是来自 wins
我是一名优秀的程序员,十分优秀!