프로그램이 시작되지만 Windows 7에서 아무 것도 수행되지 않습니다 보이지만 아무것도하지 않으며 GUI 버전도

사용자 중 한 명이 자신의 작업에서 Windows 7 64 비트 컴퓨터에서 (오픈 소스) 소프트웨어 를 실행하려고합니다 .

불행하게도, GUI 버전이나 프로그램의 명령 행 버전은 그의 머신에서 실행되지 않습니다. 프로그램이 시작된 것처럼 보이지만 아무것도하지 않으며 GUI 버전도 창을 열지 않습니다.

나는 그 과정이 실제로 너무 멀리 가고 있다고 생각하지 않습니다. 다음은 자신과 내 컴퓨터의 프로세스 스레드에 대한 프로세스 탐색기보기입니다.

그의 Windows 7 컴퓨터에서 :

Windows 7에서 프로세스 스레드

내 Windows 10 컴퓨터에서 :

Windows 10에서 프로세스 스레드

우리의 소프트웨어는 Visual Studio 2013을 64 비트 모드로 구축했습니다. MSVC 런타임이 포함되어 있습니다. 아마도 여러 기계에서 수년 동안 노력해 왔습니다.

무슨 일이야?

필요한 세부 정보를 추가하게되어 기쁘게 생각합니다.

업데이트 1 : 두 시스템에 대한 프로세스 모니터 추적 (* .pml 파일)이 있지만 해석 방법을 알고 있지만 어떤 결론을 얻을 수 있는지 잘 모르겠습니다. 살펴보고 싶은 사람? 민감한 정보가 포함되어 있다고 생각되면 여기에 게시하는 것이 주저합니다.

업데이트 2 :이 문제는 액세스 권한이있는 모든 Windows 7 컴퓨터에서 재현 할 수 있지만 다른 Windows 버전에서는 재현 할 수 없습니다.

업데이트 3 : 이전 릴리스 의 응용 프로그램은 Windows 7에서 제대로 작동하는 것으로보고되었지만 최신 릴리스 는 그렇지 않습니다. 애플리케이션을 빌드하거나 패키징하는 방식에는 변화가 없습니다.



답변

다음은 Microsoft WinDbg 디버거에서 실행할 때의 출력입니다.

Break-in sent, waiting 30 seconds...
WARNING: Break-in timed out, suspending.
         This is usually caused by another thread holding the loader lock
(36a4.2fc8): Wake debugger - code 80000007 (first chance)

로더 잠금이 무엇인지 StackOverflow를 참조하십시오 .

이것은 실제로 프로그램의 시작 절차에서 매우 일찍 발생합니다.

콜 스택에서

0:000> k
 # Child-SP          RetAddr           Call Site
00 00000000`0020e9f8 00000000`771eaa78 ntdll!ZwWaitForKeyedEvent+0xa
01 00000000`0020ea00 00000000`771eabe2 ntdll!TppWaitpSet+0x1f1
02 00000000`0020eaa0 00000000`771ed0c4 ntdll!TppSetWaitInterrupt+0xa2
03 00000000`0020eb90 00000000`770bee49 ntdll!RtlRegisterWait+0x1e4
04 00000000`0020ec60 000007fe`d7252e98 kernel32!RegisterWaitForSingleObject+0x59
[...]
MSVCR120!Concurrency::critical_section::lock+0x2a [f:\dd\vctools\crt\crtw32\concrt\rtlocks.cpp @ 1031]
[...]
17 00000000`0020f790 00000000`00000000 ntdll!LdrInitializeThunk+0xe

따라서 교착 상태 일 수는 있지만 교착 상태 일 수는 없습니다. 스레드가 이전에 중요한 섹션을 잠그고 이제 다른 것을 기다리고 있습니다. 인수를 얻는 것이 쉽지 않기 때문에 x64에서는 말하기가 어렵습니다. 그렇지 않으면 대기 체인을 통과 할 수 있습니다.


답변

이 미스터리의 원인은 Boost C ++ Libraries 1.61 버전의 실제 버그 와 Windows 7의 일부 구현 세부 사항 의 조합으로 밝혀졌습니다 .

https://svn.boost.org/trac/boost/ticket/12475

이전 버전의 응용 프로그램 (1.4.0- 베타)은 Boost 1.55를 사용하고 있으며 버그의 영향을받지 않습니다. 최신 릴리스는 버그가있는 Boost 1.61을 사용하고 있습니다.


답변