카테고리 보관물: Tools & Tips

Windows DLL loading 실패 디버깅

Windows programming 중에 DLL loading을 실패해서 오류가 발생하면 문제가 생겼다는 에러코드(0xc0000135)만 출력되고 어떤 것이 실패했는지 또 어느 곳을 찾아 봤는지에 대한 정보는 자세히 알려주지 않는다.

Windows SDK에 포함된 gflags.exe(Global Flags)를 이용하면 DLL loading에 대한 세부정보를 볼 수 있다. gflags.exe가 실행하는데 admin권한을 필요로 하기 때문에 관리자 권한으로 터미널을 띄우고 Windows SDK안에 포함되어 있는 gflags.exe를 다음과 같이 실행해서 세부 내역을 보고 싶은 실행파일의 이름과 sls(Show Loader Snaps) option을 명시 해준다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe -i <프로그램이름.exe> +sls
Current Registry Settings for <프로그램이름.exe> executable are: 00000002
    sls - Show Loader Snaps

다시 Visual studio로 돌아와서 프로그램을 실행하면 Output window에 DLL loading에 실패한 라이브러리의 이름과 시도해본 path들에 대한 세부정보가 표시된다.

8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: <실패하는 라이브러리>.dll
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: vccorlib140d_app.DLL
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: MSVCP140D_APP.dll
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135

이전 상태로 되돌리려면 옵션을 `-sls`로 변경해서 다시 한 번 gflgas.exe를 실행해 주면 된다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe -i ieproxytest.exe -sls
Current Registry Settings for ieproxytest.exe executable are: 00000000

저장공간 문제로 XCode 재 설치가 실패 할 때

XCode를 재설치 할 때 가능한 저장공간이 25GB이상 있음에도 저장공간이 부족해서 설치할 수 없다는 에러가 나온다면 제대로 삭제되지 않은 이전의 정보 때문일 수도 있다.

Uninstall xcode 10에 있는 내용을 참고해서 ~/Library/안에 있는 관련한 파일들을 삭제해주고 나니 저장공간에 대한 에러메세지 없이 잘 설치 되었다. /System/Library/안에 있는 파일들은 SIP 관련으로 그냥 삭제할 수 없고 복구모드로 부팅해서 csrutil을 실행해 주어야 한다는데 그냥 안해도 문제 없이 잘 되었다.

다음의 파일을 지우고 한번 시도해보자.

/Applications/Xcode.app 
~/Library/Caches/com.apple.dt.Xcode
~/Library/Developer
~/Library/MobileDevice
~/Library/Preferences/com.apple.dt.Xcode.plist
/Library/Preferences/com.apple.dt.Xcode.plist

macOS terminal로 Emacs 사용 할 때 meta key 변경

서버에 있는 원격 파일을 편집 할 때 대부분은 Mac용 Emacs에서 Tramp mode로 할 수 있지만, 가끔씩 서버에 접속한 터미널에서 직접 Emacs를 띄우는 경우가 있는데 이 때는 ESC key가 meta로 할당 되어서 도무지 적응 하기가 힘들다. 이 때는 terminal의 Profiles -> Keyboard에서 아랫 쪽에 있는 “Use Option as Meta key”를 설정하면 ESC 대신 Option key를 Meta key로 사용할 수 있다.