私は、OS が連鎖関数呼び出しをスタックする方法をより深く理解しようとしています。そこで、非常にシンプルな dotnet コンソール アプリを作成しました。以下のコードを参照してください。Main メソッドから "Call()" メソッドを呼び出します。exe を実行し、プロセス エクスプローラーでスタックを検索します。
しかし、意味がわかりません。関数実行のスタックが表示されることを期待していました。プロセス エクスプローラーまたは別の sysinternals ツールでこの情報を見つけるより良い方法はありますか?
public class StudyingStackExecution_B
{
public void Call()
{
Console.ReadKey();
MethodA();
}
private void MethodA()
{
var varA_1 = new object();
var varA_2 = new object();
var varA_3 = new object();
Console.WriteLine("A");
Console.ReadKey();
MethodB();
}
private void MethodB()
{
var varB_1 = new object();
var varB_2 = new object();
var varB_3 = new object();
Console.WriteLine("B");
Console.ReadKey();
MethodC();
}
private void MethodC()
{
var varC_1 = new object();
var varC_2 = new object();
var varC_3 = new object();
Console.WriteLine("C");
Console.ReadKey();
MethodD();;
}
private void MethodD()
{
var varD_1 = new object();
var varD_2 = new object();
var varD_3 = new object();
Console.WriteLine("D");
Console.ReadKey();
}
}
答え1
これは、.NET アプリ (マネージ コード) を作成したためであり、プロセス モニターではマネージ コード (C++ などのネイティブ コードのみ) からのスタックは表示されません。
こちらをご覧ください:https://stackoverflow.com/a/22436707/2879900
デバッグ中に Visual Studio の「呼び出しスタック」ウィンドウを使用して、現在の呼び出しスタックを表示できます。
https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-use-the-call-stack-window?view=vs-2022
[デバッグ] メニューで、[ウィンドウ] > [呼び出しスタック] を選択します。