728x90

하나의 exe 프로그램이 Console창을 띄우고 멀티 쓰레드로 여러개의 exe를 실행하면서 Console창에 출력을 하다보니 데드락이 발생하였다.

처음에 왜 프로그램이 멈추는지 한참 디버깅만하다가 추후에 문제를 발견하였다.

https://stackoverflow.com/questions/48646666/seemingly-deadlock-in-writefile-on-stdout

 

Seemingly deadlock in WriteFile on stdout

I am writing a small application which handles a predefined exchange of messages over the serial port(basically a custom application level protocol). The main 2 parts of it are a state-machine which

stackoverflow.com

 

앞으로 Console 창에 출력을 할 때에는 조심해야 될 듯 하다.

728x90
728x90

옛날에 개발되다가 중단된 회사의 프로젝트를 받아서 빌드를 하는데 $(QTDIR)의 경로가 이상했다.

예를 들면

내 컴퓨터의 $(QTDIR) 매크로의 주소는 "D:\QT\QT5.1.0" 인데,

Visual Studio에서 빌드 중에 $(QTDIR) 매크로의 주소는 "F:\QT\QT5.1.0" 이었다.

무엇이 문제인지 계속 확인을 하다보니, "프로젝트..vcxproj.user" 파일이 예전에 근무하시던 분이 커밋을 해놓았었기 때문에 발생하는 문제였다. 이 파일들을 전부 삭제하고 다시 빌드하니 정상 동작하였다...

728x90
728x90

만약 Nvidia 그래픽 카드를 사용하는 사람들 중에 하드디스크의 용량이 이상하게 작아져서 컴퓨터가 엄청 느려지거나, 어떠한 프로그램들이 실행이 되지 않는다면, Nvidia Geforce Experience가 설치 되어 있는지도 한번 확인을 해보자.


CPU의 점유율을 많이 잡아먹거나 C:\Users\my\AppData\Local\NVIDIA\NvBackend 경로에 backend.log 가 말도 안되게 큰 파일이 있을 수도 있다.


만약 이런 파일이 생겨있다면 가장 빠른 방법은 NVidia Geforce Experience를 삭제하는 것이 가장 빠른 방법이고, 


삭제하고 싶지 않다면 로그를 기록하는 기능을 비활성화 시켜야한다.

아래의 링크를 보고 따라하면 된다.

https://nvidia.custhelp.com/app/answers/detail/a_id/3171/~/how-to-enable-nvidia-graphics-driver-and-geforce-experience-installer-logging



728x90
728x90

여러 사람이 commit을 하다보니 한글 깨짐 현상이 발생하여 인터넷 검색 결과 3개의 설정을 변경해 주면 된다.



프로젝트 속성 -> 구성 속성 -> 일반 -> 문자 집합 : 유니코드 문자 집합 사용 (Debug, Release 전부)




도구 -> 옵션 -> 텍스트 편집기 -> 일반 -> 서명 없는 UTF-8 인코딩 자동 검색(D) 체크 해제




도구 -> 옵션 -> 환경 -> 문서->빨간 부분 체크 할 것.







출처 : https://m.blog.naver.com/PostView.nhn?blogId=yun4794&logNo=221084383612&proxyReferer=https%3A%2F%2Fwww.google.com%2F


http://www.sysnet.pe.kr/2/0/1349

728x90
728x90

DX11으로 개발한 프로그램이 내가 입사하기 전에 개발된거라서 DXSDK_JUN2010 을 설치해야 한다.


그런데 Windows 7 Ultimate K Service Pack1 사양에서 프로그램이 제대로 실행이 되지 않았다.







그래서 인터넷에서 D3DCOMPILER_47.dll을 다운받아서 실행을 했더니, 이번에는 이런 에러가 발생하면서 실행이 되지 않았다.





그래서 회사에 연락하여 프로그램을 개발 중인 PC에서 D3DCOMPILER_47.dll을 따로 받아서 넣었더니 바로 실행이 잘 되었다.


dll이 없다고 해서 아무거나 받아서 실행하지말고, 개발환경에 맞는 dll을 찾아서 넣어주는 것이 중요한 것 같다...




D3DCOMPILER_47.dll 이런 에러가 발생하는 건 나의 블로그 중에 DXSDK_Jun2010을 설치 하지 않아도 된다는 내용을 참조하면 처음부터 이 dll을 불러오지 않을 것 같다...


http://grandstayner.tistory.com/entry/DirectX11-Windows-8%EC%9D%B4%EC%83%81-%EB%B6%80%ED%84%B0%EB%8A%94-DXSDKJun10%EC%9D%84-%EC%84%A4%EC%B9%98-%ED%95%98%EC%A7%80-%EC%95%8A%EC%95%84%EB%8F%84-%EB%90%9C%EB%8B%A4-1?category=869475




- 위의 이미지는 같은 에러 메시지일 뿐 구글에서 동일한 에러 메세지의 이미지를 구해서 올린거다.

728x90
728x90

MFC로 툴을 만드는 프로젝트를 진행하는 도중에 다음과 같은 에러가 발생하였다.


error RC2108: expected numerical dialog constant


검색 결과 이 에러는 Visual Studio 2013에서 Picture Control을 사용할 때에 발생하는 버그라고 한다.


MS 고객 문의 결과 : https://connect.microsoft.com/VisualStudio/feedback/details/806403/bug-in-ressourceneditor



이 에러를 고치는 가장 확실한 방법은 


Visual Studio2013 -> 도구 -> 확장 및 업데이트 -> 업데이트 

에서 최신 버전으로 업데이트를 해주는 방법이다.



임시 방편으로 고치는 방법은 아래와 같이 수동으로 rc 파일을 수정하는 방법이다.

 

변경 전 (오류 발생)

변경 후

 CONTROL IDB_BITMAP1,IDC_STATIC,0,0,0,0,NOT WS_GROUP

CONTROL IDB_BITMAP1,IDC_STATIC,"Static",SS_BITMAP,0,0,0,0,NOT WS_GROUP

 

728x90
728x90

pIcmpSendEcho() 중에 Stop Debuging 시 Blue Screen이 발생한다.


이것은 나만 발생하는 현상이 아니었다.


https://social.msdn.microsoft.com/Forums/vstudio/en-US/c0d616a2-a1ea-43fb-831c-b1f51a957639/icmpsendecho-blue-screen?forum=vclanguage



위 사이트에서 NIC Driver를 다시 설치하면 된다고 했지만, 다시 설치를 해본 결과 동일한 증상이 발생하였다.



이것은 pIcmpSendEcho() 내부에서 무언가의 작업을 하는 도중에 Stop Debuging 을 하면 잘못된 메모리를 참조하면서 Blue Screen이 발생하는 것 같은데, 계속 Blue Screen을 띄우다간 작업 PC에 문제가 생길 것 같아서 더 깊게는 테스트를 해보지 못했다.




CPing 으로 알려져있는 이 방법은 우선 사용을 자제하는 것이 좋을 것 같다.


왜냐하면 아래의 링크를 보면, 굉장히 예전에 만들어진거라 충돌이 발생하는 것 같다.


https://siderite.blogspot.com/2015/07/getting-blue-screen-of-death-when.html




만약 Ping을 이용하여 다른 컴퓨터의 상태를 확인하고 싶다면, 


http://grandstayner.tistory.com/entry/Network-Ping%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%97%B0%EA%B2%B0-%EC%83%81%ED%83%9C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0



그냥 이것을 사용하도록 하자.

728x90
728x90

Case 1


아래와 같이 Func() 내부에서 Pointer를 잘못 썻을 경우 std::thread::join() 에서 return을 안하고


Dead Lock에 걸려있는 현상이 존재한다. (std::thread의 버그인지 vs2013의 버그인지는 잘모르겠다...)




만약 join()에서 Dead Lock이 발생한다면, Pointer를 잘못 썻을 가능성을 한번 생각해보자.





Case 2



두번 째의 경우는 std::thread::join()을 하는 시점에 main() 가 없는 시점이다.


예를 들어서 Singleton Pattern 내부에서 std::thread 를 생성하고 사용한 이후 std::thread를 명시적으로 종료하지 않고, 


Singleton 의 소멸자에서 std::thread::join() 을 호출했다면, Process 의 종료 시점이어서 std::thread::join() 가 반환하고 돌아 갈 곳이 없어진 것이다.


그렇기 때문에 main() 가 없어지기 전에 명시적으로 std::thread::join() 을 호출하여 std::thread 를 종료시켜주자.


728x90

+ Recent posts