2010-07-28 5 views
2

C++ 프로그램에서 xml 파일로 부스트 직렬화를 사용하고 있습니다. 프로그램을 디버그 모드로 테스트 할 때 정상적으로 작동합니다. 그런 다음 릴리즈 모드에서 똑같은 파일을 시도하지만 파일을로드 할 때 프로그램이 실패합니다. 나는 xml 파일을 릴리스 모드에서 내 프로그램과 함께 생성하려고 시도했다가 다시로드하고 충돌도 일으켰습니다.디버그에서 작업하는 동안 릴리스 모드에서 부스트 직렬화가 실패합니다.

packs_ui_main.exe!boost::archive::basic_xml_grammar<char>::parse_start_tag(std::basic_istream<char,std::char_traits<char> > & is={...}) Line 219 C++ 

실제 버그가 더하지만 난 호출 스택에 깊은 디버그 정보가 없습니다 :

호출 스택

이 표시됩니다. 릴리스와 디버그간에 어떤 종류의 설정이 다를 수 있는지 이해할 수 없어이 충돌을 설명 할 수 있습니다. 여기

WIN32;_CONSOLE;_DEBUG;__WXMSW__;__WXDEBUG__;_WINDOWS;NOPCH;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS 

는 전 처리기 정의입니다 내가 릴리스에서 사용 :

WIN32;NDEBUG;_WINDOWS;_CONSOLE;__WXMSW__;NOPCH;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS 

그들 중 일부는 올 여기에 편집 한

내가 디버그에 사용하는 처리기 정의입니다 wxWidgets에서

EDIT 2

XML 파일에 문자열을 저장하면 릴리스와 디버그 구성이 다르게 나타납니다. 릴리스 버전이 다른 인코딩을 사용하는 것처럼 보입니다. 공간이 완전히 문자열의 순서를 변경하고 내가 복사 - 붙여 넣기를 할 수없는 특수 문자를 삽입 같은

예를 들어

"제목은" 다른 문자 "X ~ T"로 표시됩니다 (아마 \ 0)

두 구성 모두 멀티 바이트 문자 집합을 사용하고 있는지 확인했습니다.

+1

C++에는 "디버그 모드"또는 "릴리스 모드"라는 개념이 없습니다. 컴파일러와 다른 플래그를 추가하는 것이 도움이 될 수 있습니다. – Stephen

답변

1

문제로 인해 내가 릴리스 모드에서

Multi-threaded Debug DLL (/MDd) 

대신

Multi-threaded DLL (/MD) 

의를 사용하여 컴파일 된 사실이었다.

2

내 experence의 100 %에서 디버거에서 성공했지만 디버거에서 실패하면 함수 로컬 배열을 오버런했습니다.

관련 문제