현재 매우 특이한 문제를 다루고 있습니다. MSVC 환경에서 실행하든 빌드 된 실행 파일을 직접 실행하든 관계없이 Debug-Buildmode에서 완전히 작동하는 응용 프로그램이 있습니다. Release-Buildmode에서이 응용 프로그램을 빌드하면 MSVC 환경에서 실행할 때 완전히 작동하지만 직접 시작할 때 예기치 않은 동작을 보여줍니다.MSVC++ 디버그와 릴리스 환경의 차이점
디버그 모드와 릴리스 모드의 차이점은이 동작의 원인 일 수 있으며 실행 파일을 수동으로 시작할 때만 문제가 발생하는 이유는 무엇입니까?
코드를 작성하기가 어렵습니다. 상당히 큰 프로젝트이므로 문제의 원인이 될 수있는 단서가 전혀 없습니다. 프로그램 흐름은 기본적으로 : 파일에서
- 읽기 설정 (안 문제가 두 번 읽기 값을 확인 및 ini-와 libconfig ++ 사용 - 확인하기 위해 라이브러리)
- 클래스를 분리해서 값을 배포 (더블 릴리스 빌드를 수동으로 실행되면 이러한) 내가 힘을 상상할 수
뭔가를 트리거하지 않습니다 (전달 된 값)이 클래스의
boost::thread
시작)를 확인하고 특정 이벤트에 대한 콜백 함수를 트리거 문제를 일으키고, 하지만 확실하지 오전 : 클래스가 다른 사람에 의해 작성 되었기 때문에
- ,
std::string
및std::wstring
의 사용 사이의 불일치가있다. 나는std::wstring(s.begin(), s.end())
을 사용하여 하나에서 다른 것으로 변환하고 그 반대도 마찬가지입니다.
내 문제의 원인이 될 수 있으며, 그렇다면 문제를 어떻게 해결할 수 있습니까? 나는 이것에 대한 도움을 정말로 바랄 것이다. 미리 감사드립니다.
업데이트 :
- 이 프로그램은 충돌하지 않고 변수 내가 (디버거 모든 것이 잘 밖으로 작동에 있기 때문에) 악명 높은 인쇄 디버그 방법을 사용할 때
- 다른 값을 가질하지 않는 것 나는 unitialized 변수가이 문제를 일으킬 수 있고 나에 의해 사용되는 모든 변수를 세 번 검사하고 모든 변수가 제대로 초기화됨을 읽었습니다.
- 단위 테스트에서 모든 모듈이 예상대로 작동합니다. 국경 사건은 매번 바뀌 었습니다. 모든 모듈을 직접 작성하지 않았습니다.)
업데이트 2 :
- 단계별로 최적화 단계를 해제 가까이 내가 문제를 좁힐 수 있었다 디버그 buildmode의 분리 buildmode을 가져 오는 동안 : ** 코드 생성 탭에서, 최적화 설정에 관계없이 내 프로그램은
Multithreaded-DLL
이 아닌Multithreaded-Debug-DLL
으로 작동합니다.
이것은 좋은 성과 인 것 같지만 아직이 문제에 대한 이해가 부족합니다.
정확히 무엇이 문제입니까? 프로그램이 충돌합니까? 이러한 이벤트를 트리거하는 코드를 찾으려고 했습니까? 문자열의 불일치를 완전히 수정 했습니까? –
종종 이것은 프로그램 시작 방법에 따라 다른 임의의 값을 가져 오는 초기화되지 않은 변수입니다. –
@Bojan Komazec "고정 문자열 완전하지 않음"이란 무엇을 의미합니까? 위에서 설명한 것처럼 std :: string을 std :: wstring으로 여러 번 변환해야합니다. – nijansen