반응형
크롬과 엣지에서 Exception 0X406D1388 덤프가 많이 발생했다.
덤프파일을 windbg 로 열어 analyze -v 를 실행한 스택내용은 다음과 같았다. (크롬 심볼서버 세팅함.)
STACK_TEXT:
KERNELBASE!RaiseException+0x6a
chrome!base::PlatformThreadBase::SetName+0x1ae
chrome!base::internal::ThreadGroupImpl::WorkerThreadDelegateImpl::OnMainEntry+0x74
chrome!base::internal::WorkerThread::RunWorker+0x81
chrome!base::internal::WorkerThread::RunPooledWorker+0x18
chrome!base::`anonymous namespace'::ThreadFunc+0x11c
kernel32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21
크롬은 오픈소스 기반이니까 PlatformThreadBase::SetName 함수를 검색해 봤다.
https://source.chromium.org/chromium/chromium/src/+/main:base/threading/platform_thread_win.cc
여기에서 SetName 함수를 찾아보면 내용이 이렇다.
// This function has try handling, so it is separated out of its caller.
void SetNameInternal(PlatformThreadId thread_id, const char* name) {
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = name;
info.dwThreadID = thread_id;
info.dwFlags = 0;
__try {
RaiseException(kVCThreadNameException, 0, sizeof(info) / sizeof(ULONG_PTR),
reinterpret_cast<ULONG_PTR*>(&info));
} __except (EXCEPTION_EXECUTE_HANDLER) {
}
}
THREADNAME_INFO 구조체에 값들을 채우고서 뜬금없이 kVCThreadNameException 예외를 발생시킨다 (RaiseException).
// The information on how to set the thread name comes from
// a MSDN article: http://msdn2.microsoft.com/en-us/library/xcb2z8hs.aspx
const DWORD kVCThreadNameException = 0x406D1388;
kVCThreadNameException 이 바로 덤프 제목에 포함되어 있는 0X406D1388 .
검색해 보니 디버거에서 디버깅시에 편리하도록 쓰레드 이름을 설정하는 코드라고 한다.
예외를 일부러 발생시켜서 이런 것도 하는구나.
예외덤프가 많이 발생해서 무슨 문제인가 했는데, 문제가 아니었다.
728x90
'프로그래밍 > 미분류' 카테고리의 다른 글
PE Header (0) | 2024.01.27 |
---|---|
[RUST] rusqlite, LNK1181: cannot open input file 'sqlite3.lib' (0) | 2024.01.03 |
Flutter Warning: Operand of null-aware operation '!' hastype 'SchedulerBinding' which excludes null. (0) | 2022.08.06 |
powershell 이 시스템에서 스크립트를 실행할 수 없으므로 Microsoft.PowerShell_profile.ps1 파일을 로드할 수 없습니다. (0) | 2022.08.06 |
인코딩을 들여다보자 (0) | 2022.07.13 |