안녕하세요 최근 닷넷8로 전환 후 사용중인데 디버거 관련해서 질문이 있습니다 
간단하게 작성해본 아래의 코드인데요 
// Net 7, 8 Release 빌드
F1();
// [StackTraceHidden]  // 이때도 변화가 없습니다 
// [MethodImpl(MethodImplOptions.AggressiveInlining)] // 이때도 변화가 없습니다 
// [MethodImpl(MethodImplOptions.AggressiveOptimization)] // 이때는 Net 6과 동일하게 F1, F2가 디버거에서 안보입니다
void F1()
{
    F2();
}
void F2()
{
    F3();
}
 
void F3()
{
    Thread.Sleep(1000);
    Console.WriteLine("F3" + Environment.StackTrace);
}
이 코드를 릴리즈로 빌드 후 Console.WriteLine 에 중단점을 잡고 디버깅 시
Net6 에서는 메인 - F3 으로 호출 스택 이 나오고
Net7, 8 에서는 메인 - F1 - F2 - F3 으로 호출 스택이 나오고 있습니다
자주 사용하지 않는 [MethodImpl(MethodImplOptions.AggressiveOptimization)] 를 명시적으로 추가 시에는 Net 6과 같은 호출 스택이 잡히는데요 
Net 7, 8 의 디버거나 릴리즈 빌드 시 변경사항에서는 이러한 내역을 확인할 수 없는데 혹시 변경된 점을 알고 계실까 하여 질문 남겨봅니다
만약 실제 생성되는 바이너리도 Net8 에서 이러한 문제가 있다면 실무에서 사용중인 Net6 프로젝트의 Net8 마이그레이션을 미뤄야 할 것 같습니다 
감사합니다 
        
        
                    
                    
                    
                    
                    
    
                    
                    
                    
                    
                    
                
                    [최초 등록일: ]
                    [최종 수정일: 2/17/2024]