は、次のC#コードを考えてみましょう:Visual Studioデバッガの呼び出しスタックにRuntimeMethodInfo.Invokeが表示されないのはなぜですか?
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 メーカー 2008またはVisual Studioの 2008年にそれを実行して、私は「印刷」メソッド内に置くブレークポイントにヒットすると、私は次の取得しますコールスタックウィンドウ:!
ConsoleApplication4.exe ConsoleApplication4.Program.Print(文字列 toPrint)マネージド・トランへ
[ネイティブネイティブの移行への管理対象sition]
[]
ConsoleApplication4.exe!ConsoleApplication4.Program.Main(文字列[] argsが )
RuntimeMethodInfo.Invoke
が私のコールスタックに表示されないのはなぜ?結局のところ管理された方法なので、私はそれが私が期待するように見ないのはなぜですか?
また、一般的に、ここでのルールは何ですか?コールストアから欠落していると思われる管理対象メソッドはどれですか?
申し訳ありませんが、あなたは正確に「まで解決」によって何を意味するのですか? "Invoke"と "InvokeMethodFast"はMethodImplOptions.InternalCallとマークされておらず、 "_InvokeMethodFast"のみです:Reflectorでコードを見ることができます。 –
@Omerというのは、最終的に '_InvokeMethodFast'がコールされることを意味します。 'Invoke'と' _InvokeMethodFast'の間の全てが 'DebuggerHidden'であり、' Just My Code'が有効になっているため、おそらく除外されます。私は、より完全なコールスタックを得るための答えを更新しました – JaredPar
- [DebuggerXAttributesの影響をまとめたこのブログ記事](http://blogs.msdn.com/b/stevejs/archive/2005/12)によると、 /03/499803.aspx)と私自身のテストでは、 "Just My Code"にかかわらず、 'DebuggerHidden'メソッドは呼び出しスタックに表示されません。 –