如何從 .net 控制台應用程式查看 Sysinternals Process Explorer 中的進程堆疊?

如何從 .net 控制台應用程式查看 Sysinternals Process Explorer 中的進程堆疊?

我試圖更深入地了解作業系統如何堆疊鍊式函數呼叫。所以我創建了一個非常簡單的 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 應用程式(託管程式碼),而 Process Monitor 不會向您顯示託管程式碼(僅限本機程式碼,例如 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

在「偵錯」功能表中,選擇「視窗」>「呼叫堆疊」。

相關內容