안녕하세요 최근 닷넷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]