나는 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
디버그 메뉴에서 Windows > 호출 스택을 선택합니다.