2009-12-26 6 views
0

저는 Windows XP Visual Studio 2008에서 개발 해왔습니다. 32 비트 모드로 C++ 응용 프로그램을 개발하고있는 것 같습니다. 내 새 Windows 7 64 비트 상자에서 프로그램을 실행하면 반입 방법을 통해 액세스 위반 오류가 발생합니다. 따라서 모든 개발 도구를로드하고 Windows 7에서 프로젝트를 다시 컴파일하여 충돌 사이트를 찾았지만 완벽하게 작동합니다! 뭐? 내 앱을 x64에서 작동하게하려면 어떻게해야합니까? 두 개의 별도 버전을 출시해야합니까? 64 비트를 대상으로 할 수 있지만 두 개의 별도 실행 파일이 마음에 들지 않습니다. 검색했지만 계속 두 가지 버전의 솔루션 또는 모든 .net. 이것은 네이티브 C++입니다. x86 플래그가 어딘가에 있습니까?XP 32에서 Visual Studio로 만든 응용 프로그램이 액세스 위반시 64 번 충돌합니다. 버그를 찾으려면 64 비트 환경에서 다시 컴파일, 잘 작동합니다. 뭐?

답변

3

"두 개의 별도 버전을 출시해야합니까?" 앱에 따라 다릅니다. 대부분의 32 비트 앱은 WoW 모드에서 정상적으로 작동합니다.

"어딘가에 x86 플래그가 있습니까?" . 구성 관리자 (Alt-B, O)를 열면 플랫폼 선택에서 win32가 표시됩니다.

왜 앱이 충돌하는지 디버깅하는 것입니다. 디버거를 64 비트 OS의 32 비트 버전에 연결할 수 있어야합니다.

1

메모리를 망가 뜨릴 가능성이 있습니까? 응용 프로그램이 메모리에로드되는 방식에서부터 32 비트 Windows의 32 비트 응용 프로그램과 64 비트 Windows의 64 비트 응용 프로그램은 중요한 데이터 위치를 덮어 쓰지 않아도됩니다. 반면 64 비트 Windows에서는 32 비트 앱이 운이 좋지 않고 충돌이 적습니다.

실제로 메모리를 소진하고 있는지 확인하려면 PurifyValgrind과 같은 도구를 사용할 수 있습니다.

+0

Windows에서 Valgrind는 작동하지 않습니다. –

0

다른 응답에서 이미 말했듯이 응용 프로그램에는 한 환경에서 숨겨진 버그가있을 가능성이 큽니다. 학습 곡선의 측면에서 입력 비용이 저렴한 좋은 도구는 Microsoft의 application verifier입니다. debugging tools과 함께하면 아주 좋은 시작을 제공 할 수 있습니다. gflags 유틸리티를 살펴보십시오.