如何从.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

在调试菜单中,选择“Windows”>“调用堆栈”。

相关内容