Microsoft MVP성태의 닷넷 이야기
.Net 8 에서 디버거 변경 [링크 복사], [링크+제목 복사],
조회: 9454
글쓴 사람
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")
정성태

... 46  47  48  49  50  51  [52]  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1558민식짱4/23/201517196FFmpeg.exe 를 이용한 C# 동영상 인코더 예제를 보고 질문드립니다 [1]파일 다운로드1
1555김응규4/22/201521656WCF net.tcp 관련해서 질문 드립니다. [2]
1556김응규4/22/201519552    답변글 [답변]: WCF net.tcp 관련해서 질문 드립니다. [1]파일 다운로드1
1554(삭제)4/19/201519992안드로이드 에뮬레이터에서 특정 앱 구동불가할때! [2]
1552spow...4/18/201526621마이크로세컨드 단위의 Sleep이 필요한데 찾질 못하겠습니다. [5]
1553spow...4/18/201519120    답변글 [답변]: 마이크로세컨드 단위의 Sleep이 필요한데 찾질 못하겠습니다. [1]
1551인디언기...4/16/201518234iisnode에 대해서 글 올리셨던데 질문이 있습니다 [1]
1549김선아4/15/201518765.net framework 4.5와 c++ dll에 관한 질문입니다 [1]
1550김선아4/15/201516955    답변글 [답변]: .net framework 4.5와 c++ dll에 관한 질문입니다 [2]
1547문명식4/3/201519315IWebBrowser Key Event 관련 [2]
1545나종식3/25/201518123internet explorer dns cache flush [2]
1543이용원3/23/201517488hyper-v 질문드려요! [1]
1544이용원3/24/201516866    답변글 한가지만 더 여쭤볼게요! [1]
1541임기성3/20/201524195Microsoft.Office.Core dll관련 문제 [1]
1539펜플3/17/201517405asp.net 질문입니다. [1]
1540113/17/201517434    답변글 [답변]: asp.net 질문입니다. [1]
1538열공합시닷3/13/201518348중계서버 질문드립니다 [1]
1537김재영3/11/201520028asp.net의 빌드 유휴시간 이후의 리빌드 작업을 컨트롤 할 수 있습니까? [2]
1536솔솔3/9/201517882mac address얻으려고 하는데요.. [1]
1535Stud...3/4/201518184C#엔 MFC의 theApp 과 같은 기능을 하는것이 없나요? [3]
1534김동진3/4/201517837C#에서 BHO로 Windows Explorer에서의 동작이 가능할지요 [2]
1533김동현3/3/201518085컴파일 된 프로그램에 코드 삽입(?) 관련입니다. [1]
1532반가워요3/3/201521165C# 소켓연결에 packet송수신... [8]
1531강현수3/2/201519941C# com 등록 시 GUID 변경 관련 문의 [1]
1529김민규2/15/201519415C++ 64bit/32bit [3]파일 다운로드1
1528김개똥2/14/201516748좀 관련없는 질문이지만, 정말 답답하고 찾는데 명확한 해답 찾지못해 질문 올립니다. <Windows 사용자 인증> [1]
... 46  47  48  49  50  51  [52]  53  54  55  56  57  58  59  60  ...