2011-03-26 2 views
7

My Qt 프로그램 (g ++ 4.4.0)이 나에게 Microsoft Visual C++ 런타임 라이브러리 오류를 제공합니다. "이 응용 프로그램이 런타임에 비정상적으로 종료되도록 런타임을 요청했습니다." 하지만 디버거에서 실행할 때 오류 메시지가 나타나지 않습니다. 누가 충돌에 대한 정보를 얻을 수있는 방법을 알고 있습니까? 메시지 상자에는 확인 버튼이 있습니다."이 응용 프로그램은 비정상적인 방식으로 런타임을 종료하도록 런타임을 요청했습니다."

편집자 : Wimmel의 조언에 따라 디버거에 연결했습니다. ThreadID 1과 3을 가진 두 개의 스레드가 있습니다. 스택은 다음과 같습니다.

Level Function    File       Line Address 
0  VTagOutput   C:\Windows\syswow64\user32.dll 0 0x7529438d 
1  VTagOutput   C:\Windows\syswow64\user32.dll 0 0x7529438d 
2  USER32!EmptyClipboard C:\Windows\syswow64\user32.dll 0 0x752a2674 
3  ??             0 

Level Function         File       Line Address 
0  ntdll!LdrFindResource_U      C:\Windows\SysWOW64\ntdll.dll 0 0x76f5000d 
1  ntdll!LdrSetAppCompatDllRedirectionCallback C:\Windows\SysWOW64\ntdll.dll 0 0x76fdfabe 
2  ??                  0 0x7b9609b5 
3  ??                  0 

아마도 두 번째 스레드가 오류 메시지를 표시하고 있습니까? 첫 번째는 조금 이상합니다. 상위 두 줄은 동일합니다. 내 코드에는 TagOutput이라는 이름이 없으며 Qt도 내가 말할 수있는 한 아무것도 가지고 있지 않습니다.

+1

은 아마 당신은 확인을 클릭하기 전에 디버거를 연결하고, 오류가 어디에서 오는지 볼 수있는 모든 스레드의 스택 프레임을 볼 수 있습니다. – wimh

+0

표시되는 모든 기호는 시스템 DLL에서 온 것입니다. 빌드에 디버그 정보를 포함 시켰습니까? –

+0

@Alan : 예. 나는 그 프로그램이 이미 사라 졌다고 생각하는데, 이것은 단지 시스템의 오류보고 메커니즘 일 뿐이다. – TonyK

답변

3

처음 Qt 개발 환경 설정을 시도하고 MinGW의 다른 버전을 여러 개 설치했을 때만 오류 메시지를 본 적이 있습니다. 마치 실행 파일이 다른 모든 것에 동의하지 않는 mingwm10.dll 버전을 찾아서로드하는 것처럼 보였습니다. 난 사냥을하고 내가 원했던 문제를 제외하고 그 dll의 모든 버전을 삭제했다.

+0

나는 그들을 사냥했다. 그리고 6 개의 (!) 3 개의 다른 버전이있다. 당신이 원하는 것을 어떻게 결정 했습니까? – TonyK

+0

그럴 수 있지만 시도해보십시오. Qt SDK를 사용하고 있다면 SDK에 포함 된 SDK를 원할 것입니다. 나에게 발생하는 한 가지 방법은 찾은 dll 파일을 실행 파일과 동일한 디렉토리에 복사하고 각 파일을 호환 가능한 디렉토리를 식별 할 때까지 한 번에 하나씩 시도하는 것입니다. 실제로, 이것이 원인입니다. –

+0

팁 주셔서 감사. 하지만 내 경로에는 단 하나의 mingwm10.dll 만 있고 Qt와 함께 제공되므로 문제가 될 수 있습니다. 한편으로는 겉으로는 무관 한 변화가 일어난 후에 프로그램은 충돌을 멈췄다. 그래서 거기에 숨어 ​​있어요. – TonyK

0

누락 된 종속성을 찾기 위해 프로세스 이름과 파일 액세스에 procmon.exe 및 필터를 사용하십시오.

Qt 5.0.1과 동일한 문제가있었습니다.
프로그램에서 Qt 프레임 워크의 일부 DLL이 누락되었습니다.
나는 디렉토리에 그들을 발견

<QTINSTALLDIR>\Qt5.0.1\5.0.1\mingw47_32\plugins 
관련 문제