태그 보관물: tip

Visual Studio Code test explorer에서 explorer로 변경되는 문제

최근 업데이트(1.65.2) 이후 부터 였던 것 같은데 VSCode의 test explorer에서 테스트를 실행하면 자꾸만 explorer로 자동 변경되는 문제가 생겼다.

이 문제는 새롭게 생긴 설정인 testing.openTesting을 neverOpen으로 변경해 주면 해결된다.

{ // settings.json
   ...
    "testing.openTesting": "neverOpen"
}

또는

Setings -> Features -> Testing -> Testing: Open Testing

왜 이런 짓을??

정보의 바다에서 이와 관련해 의견을 나눈 기록을 찾았는데 Switching to test explorer when users clicks ‘run tests’에 따르면 커스터머 인터뷰 중에 IntelliJ에 구현된 이와 관련된 유사한 기능이 요청된 모양이다. 다행히도 이 기능이 VSCode에서는 오히려 불편하기만 할꺼라는 의견을 가진 사람 덕분에 option으로 빠지게 되었는데 default 값은 이 기능이 동작하는 openOnTestStart로 되어 버렸다. 변경 사항에 관련된 ticket은 여기에서 찾을 수 있다.

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

[Tip] Mac version docker에서 띄운 (웹) 서버에 접속하기

Mac version Docker에 띄워둔 web server에 host에서 접속하려면 어떻게 해야 할까? 실행할 때 ‘–network=host’를 주면 된다는 얘기가 있어서 해봤는데, Mac에서는 통하지 않았다 이건 linux용이라고… Networking features in Docker Desktop for Mac에 따라 실행할 때 port를 매핑하는 것으로 이 문제를 해결할 수 있다.

Docker의 9090 port에 Mac의 9090 port로 접근하려면 다음과 같이 -p option으로 port를 매핑해서 docker를 띄운 후 서버를 실행한다.

# Port 매핑으로 docker를 실행
MAC$ docker run --rm -ti -p 9090:9090 DOCKER_IMAGE

# Docker에서 웹서버를 띄운다. Python http.server module을 사용.
DOCKER$ python -m http.server 9090
Serving HTTP on 0.0.0.0 port 9090 (http://0.0.0.0:9090/) ...

이제 Mac의 web browser로 해당 포트에 접근할 수 있다.

[Tip] Git:삭제한 file들 한번에 정리하기

Git repository에서 많은 파일들을 삭제하고 적용하는 경우, git rm 명령어로 파일이름들을 하나하나 입력해 주는것은 무척 귀찮다. 예전에는 세로 편집이 되는 Ultra-edit 같은 utility로 삭제된 목록을 복사한 다음 git rm 명령어 line으로 편집해서 다시 terminal에 붙여 넣는 삽질을 했었다.

Git-ls-files command를 쓰면 더 이상 그럴 필요가 없다. 이 command는 repository의 file들을 지정한 상태별로 알려준다. 예를들어, 삭제된 file의 목록을 보려면 다음과 같이 하면 된다.

git ls-files --deleted

이렇게 얻어진 목록을 git rm command에 넘겨도 대부분의 경우 동작하겠지만, 파일 이름에 공백문자를 포함하는 경우에는 제대로 동작하지 않는다. 공백문자에 대해서도 제대로 동작하도록 sed로 공백문자 앞에 ‘\’를 삽입하려면 다음과 같이 한다.

git ls-files --delete|sed 's/ /\\ /g'|xargs git rm

[Tip] Eclipse가 시작되지 않을 때

뭔가 잘못되어서 eclipse를 실행도중에 끈 것 같은데 그 후 부터는 eclipse가 시작되지 않는 문제가 생겨서 이리 저리 검색하다가 Stackoverflow에서 이 thread를 찾았다. 실제로 내 <WORKSPACE> 경로에 있는 .metadata/.log를 보니 다음과 같은 오류 메세지가 보이고 있었다.

[WORKSPACE/.metadata/.log]

!ENTRY org.eclipse.core.jobs 4 2 2014-07-11 09:08:36.054
!MESSAGE An internal error occurred during: "Workbench early startup".
!STACK 0
java.lang.NullPointerException
at org.eclipse.core.internal.runtime.InternalPlatform.getLog(InternalPlatform.java:354)
at org.eclipse.core.runtime.Plugin.getLog(Plugin.java:291)
at org.eclipse.ui.internal.WorkbenchPlugin.log(WorkbenchPlugin.java:809)
at org.eclipse.ui.internal.EarlyStartupRunnable.handleException(EarlyStartupRunnable.java:81)
at org.eclipse.core.runtime.SafeRunner.handleException(SafeRunner.java:75)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:44)
at org.eclipse.ui.internal.Workbench$54.run(Workbench.java:2412)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
...

.metadata 아래에서 다음 경로의 .snap과 workbench.xmi file을 삭제하고 다시 eclipse를 시작해 본다.

rm .metadata/.plugins/org.eclipse.core.resources/.snap .metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi