Microsoft MVP성태의 닷넷 이야기
.Net 8 에서 디버거 변경 [링크 복사], [링크+제목 복사],
조회: 2159
글쓴 사람
a
홈페이지
첨부 파일
 

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


비밀번호

댓글 작성자
 



2024-02-17 10시23분
Jitter가 최적화를 어떻게 할지는 개발자가 관여할 수 없는 사항입니다. 설령, 지금 .NET 6가 그렇게 동작한다고 해서 이후 (지원 종료가 올해 11월 12일이니) 패치에서도 동일하게 실행될 거라고 예측해서는 안 됩니다.

참고로, .NET 8의 경우에는 Dynamic PGO의 영향이 큽니다.

.NET 8 - Dynamic PGO를 결합한 성능 향상
; https://www.sysnet.pe.kr/2/0/13448

따라서 "SET DOTNET_TieredCompilation=0" 옵션을 설정하고 테스트하면 .NET 6처럼 나올 것입니다. 물론, 그것이 언제나 동일할 거라고도 장담할 수 없습니다. 또한, 인라인 여부 역시 Jitter 측에서 임의의 내부 기준을 가지고 판단하는 것이므로,

C# - JIT 컴파일러의 인라인 메서드 처리 유무
; https://www.sysnet.pe.kr/2/0/13064

그걸 개발자가 기대한 대로 예측하고 코딩을 해서는 안 됩니다. ("https://www.sysnet.pe.kr/2/0/12005#end")
정성태

... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
5072엔벌잉10/24/20188329C# textbox, button질문입니다! [4]파일 다운로드1
5071엔벌잉10/23/20188703C#윈도우폼 질문입니다!! [2]
5070진우10/17/20188581Visual Studio 서비스팩과 업데이트 차이 문의 [2]
5069감자10/12/20189437빌드 구성을 재설정하는 방법이 있을까요? [1]파일 다운로드1
5068누오10/10/20188214ASP Core 2.0 에서 dll안에 있는 뷰 읽어들이는 방법? [1]
5067김정민10/5/20188215다른 윈도우가 깨지는 현상을 막을 수 있을까요 [3]
5066로니브10/4/20188988ASP.NET MVC에서 View 파일 숨기는법? 보안처리 하는법? 관련 질문.. [1]
5065키모10/1/201810150문자 질문입니다. [3]
5064로니브10/1/20189470클래스 라이브러리에서 .cshtml파일을 추가하는 방법은 없나요? [3]
5063진우9/28/20188521ADO.net 과 Entity Framework 차이 문의 [2]
5062테스트9/27/20188994C# import file 의 구조체 배열 선언 및 호출에 대해 문의. [3]
5061안녕하세요9/13/20189026c# 프로그래밍 관련 문의 [1]
5060임민재9/8/20188524c# install 파일 생성 시 문제가 발생하였습니다 [1]파일 다운로드1
50599/7/20188170Winform TextBox 포커스 유지하는 방법 질문 [파일첨부] [1]파일 다운로드1
50589/5/201811560Winform TextBox 포커스 유지하는 방법 질문 [3]
5056박종윤8/30/201810851c# dll을 C++에서 사용 시 event 호출 [4]파일 다운로드1
5055초보자8/29/20189549asp.net 에서 다른 서버의 iis를 stop하는 batch file을 실행시키는데 동작하지 않습니다. [5]
5054사도신8/29/20188233[wpf] textbox insert overite 모드시에 [4]파일 다운로드1
5053엿장수8/26/20187591directshow filter 에서의 IMediaSample 의 시간에대한질문입니다 [1]
5052오명현8/26/20188471Tcp소켓 실습 Exeption 도와주세요! [4]파일 다운로드1
5049오명현8/23/20187850책 477페이지 내용 중 이해가 안가는 부분이 있어 질문드립니다. [1]
5048오명현8/23/20187532포트 관련 질문 하나더 있습니다. [1]
5047오명현8/22/20188240포트가 없을 경우를 가정한 내용에 대해 질문이 있습니다. 책468p. [1]
5046엿장수8/22/20188162다이렉트쇼 필터 추가하는데 [2]
5045임도진8/22/20188875c# opencv dll파일 로드 질문 [3]파일 다운로드1
5044엿장수8/20/20188574graphedit 에 등록되어있는 필터를 가져와서 사용하는방법을 알고싶습니다 [2]
... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...