인프런에 Windows Debugging Tip강좌 올렸습니다.
1,2편 무료공개이고 4K해상도 지원합니다.
1,2편 무료공개이고 4K해상도 지원합니다.
앞서 static CRT마다 각각의 heap을 가지는지 여부는 MSVCRT와 UCRT의 차이로 결정된다고 포스팅 했었다. 결론부터 얘기하자면 앞선 포스팅의 결과는 틀렸다.조금 더 테스트를 해보니 static CRT를 사용하는 DLL을 로드 할 때 heap이 증가되는가의 여부. 즉 CRT가 초기화될 때 마다 개별적인 heap을 가지는지의 여부는 UCRT와 MSVCRT의 차이는 아니다. 이미 MSVCRT 시절에 어느 시점부터 정책이 변경됐다. 아래는 테스트 결과 … More DLL에서 static CRT를 사용하면 각각의 DLL은 다른 heap을 사용하는가? #2
디버거에서 exe를 launch한 경우 LFH를 사용하지 않는다는 글을 어디선가 본것 같다.일단 Visual Studio Debugger에 대해서는 해당되지 않는 얘기다.Windows 10/11 모두 exe를 직접 실행하거나 Visual Studio에서 launch한 경우 LFH를 사용하는 것을 확인했다. 이 와중에 조금 이상한 점을 발견했는데 windbg에서 launch하는 경우 동일 사이즈 메모리 할당에 대해서 HeapAlloc()에서 돌려주는 메모리의 실제 사이즈(heap entry의 사이즈)가 다르다는 것이다.debug/release 또는 … More windbg에서 실행할 때 HeapAlloc()이 다르게 동작하는 이유
Registry 설정 HKEY_LOCAL_MACHINE+SOFTWARE++Microsoft+++Windows NT++++CurrentVersion+++++AeDebug++++++Debugger = “C:\Windows\system32\vsjitdebugger.exe” -p %ld -e %ld -j 0x%p++++++Auto = 1 필요없으면 Auto = 1로 설정
변수명이야 종교와 문화라고 생각하면 넘어갈 수 있다. 아래처럼 함수의 리턴값을 막바로 caller로 사용하는건 이해할 수 없다. A) width = pObjManager->GetInstance()->CalcRect()->GetWidth(); 난 무조건 다음과 같이 짜는데 이유가 디버깅 때문이다. B) pInstance = pObjManager->GetInstance(); pRect = pInstnace->CalcRect(); width = pRect->GetWidth(); A) 처럼 짜면 짤때야 편하겠지. 타이핑을 몇 자라도 줄일테니까. 근데 디버깅할때, 특히 코드 분석하려고 디버거로 … More D = A()->B()->C(); 이게 뭔 ㅈ ㄹ 이고?
이전에 Project D Online과 Voxel Horizon 모두 UWP앱으로도 유지보수를 하고 있었다. 당연히 ARM빌드도 같이 지원했고 Windows Phone에서 작동 가능했다. 몇년전부터 MS가 Windows Phone을 땅에다 파묻어버렸기 때문에 더 이상은 ARM빌드를 유지할 이유도 없었고 유지하고 싶어도 테스트할 수가 없었다. Windows API버전은 올라가는데 폰은 업데이트가 안되니까. 최근 Windows on ARM의 레퍼런스 디바이스 Surface Pro X가 출시됐다. 기계를 제어한다는 … More x86/x64 데스크탑 어플리케이션 Windows on ARM으로 포팅하기 #1
Voxel Horizon은 NVAPI를 사용한다. NVAPI는 GPU의 상태를 확인하거나 일부 기능을 제어할 수 있는 nvidia 그래픽 드라이버에서 제공하는 API이다. NVAPI SDK는 nvidia 개발자 홈페이지에서 다운로드할 수 있다. C스타일의 .h / .lib / .dll로 구성된 아주 간단한 SDK다. 이걸로 게임 플레이중 GPU점유율과 GPU온도, 남은 GPU메모리의 양을 확인한다. 물론 일반 유저들을 위한 기능은 아니고 개발할때 필요한 디버깅용 기능으로 … More nvapi에서 NvAPI_GetMemoryInfo()주소 얻어오기 – (어셈블리어 학습해야하나요?)
예전에 포프님 방송에서 잠깐 exception 얘기가 나왔는데 어떤 인간이 SEH와 C++익셉션은 다르다면서 날 막 깠다. 싸우기 싫어서 그냥 피했는데 오늘 다른 지인분과 대화중에 익셉션 얘기가 나와서 생각난김에 좀 따라가봄. 일단 try절을 시작하기 전에 함수 도입부를 보면 SEH와 똑같다. 그리고 throw를 호출했을때 코드를 따라가보면 다음과 같이 _NtRaiseException을 호출하는데 보다시피 시스템 서비스다. 사실상 인터럽트 일으키는거 맞잖아. … More C++ exception의 내부 구현에 대한 잡설
https://blogs.msdn.microsoft.com/vcblog/2017/11/15/msvc-conformance-improvements-in-visual-studio-2017-version-15-5/ Visual Studio 2017 15.5로 업데이트 하면 ConformanceMode란 놈을 디폴트로 켜버린다. C++ 표준을 준수하게 하는 모드라고 한다.(니미 난 내 제품 만드는게 중요한데 C++표준이 알게 뭐냐. 사실상 게임업계에선 MSVC가 표준이지.) 이전에 만든 프로젝트라면 상관없지만 새로 만드는 프로젝트는 ConformanceMode가 켜지게 된다. pure UWP 프로젝트는 아직 테스트 안해봤지만 Desktop App에서 C++/CX를 이용해서 UWP API를 호출하는 경우 문제가 된다. … More win32 + C++/CX프로젝트에서 ConformanceMode때문에 생기는 문제
최근 Visual Studio 15.4.1에 Windows Application Packaging Project 템플릿이 추가됐다. 이 템플릿을 이용하면 손쉽게 데스크탑 어플리케이션을 AppX로 패키징할 수 있다. 그 방법이 너무나 쉬우므로 자세한 설명은 달지 않는다. 링크 참조. https://blogs.windows.com/buildingapps/2017/10/18/visual-studio-2017-update-4-makes-easy-modernize-desktop-application-make-store-ready/ 그런데 github의 MS샘플도 그렇고 어디에도 이 템플릿을 사용했을때 uwp app과 interop하는 예제는 없다. 내가 원하는 샘플과 자료는 아래 링크의 내용이다. https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-extend 그런데 빌어먹을….이건 VS2017에 … More Windows Application Packaging Project를 이용해서 만든 Destktop Bridge app에서 UWP App과 interop하기.
댓글을 달려면 로그인해야 합니다.