Visual Studio 에서 실행한거랑 빌드결과 나온 exe 를 실행하는거랑 다른가요?
글쓴이: konbenia / 작성시간: 화, 2013/07/30 - 8:59오전
프로그램을 만들던 도중 Release 로 놓고 컴파일러 상으로 실행한것이랑 컴파일러되서 나온 EXE 를 실행한것이랑 결과가 다르다는것을 알았습니다.
에러가 나거나 그렇진 않지만 그냥 프로그램 실행결과 나오는 데이터가 아주 완벽하게 다르게 나오네요. 이상하게 debug 는 다 같고요.
정리해보자면 debug로 컴파일러상 실행한것, debug로 컴파일된 exe를 실행한것, Release로 컴파일러상 실행한것 은 결과가 같고요 Release로 컴파일된 exe 를 실행한것만 결과가 다르네요.
혹시 실행경로상 문제일까봐 EXE 를 프로젝트 폴더에 놓고 실행해봐도, 관리자 권한으로 실행해봐도, 프로젝트를 다시 만들어서 실행해봐도, 최적화도 풀어보고 다
바꿔봐도 결과가 다르게 나와서 삽질을 열심히 하고있습니다... ㅠㅠ
이런 현상의 원인이 될 만한것, 어떤것이 있는지 조언부탁드립니다 (-_-) (_ _) (-_-)
Forums:
debug release
Debug 모드로 컴파일 하면 Release 모드와는 몇가지 다른부분이 있습니다.
저도 잘 기억은 안나니까 그 차이점을 중점으로 검색을 해보시면 나올껍니다.
대충만 말씀드리면...
스택 검사 여부
할당된 메모리 초기화(0xcc)
반납된 메모리 초기화
등등입니다.
결론은 "잘못" 만들어진 프로그램은 Debug 와 Release 에서 좀 다른 동작을 할 경우가 있습니다.
아니요.. 그게 아니라
컴파일러에서 실행한 release 랑 exe 로 나온 release 랑 다르다고요.
debug 모드랑 상관없이요. ㄷㄷ
release로 컴파일한것과 debug로 컴파일한
release로 컴파일한것과 debug로 컴파일한 것이
결과가 다른 일은 흔한 일이고 주요 원인은 앞의 분 말씀대로입니다.
주로 초기화하지 않은 변수를 사용한 경우가 대부분이었습니다.
특이한 현상은 같은 release모드에서,
IDE상에서 실행한 것과, 실행파일을 독립적으로 실행한 경우 결과가 다르다는 것인데,
처음에는 당연히 working directory관련 환경문제를 의심했으나,
그것도 해보셨다고 하니 좀 이상하긴 합니다만,
일단 현재 IDE상에서 실행할때 F5로 실행할것 같은데,
그러지 말고, Ctrl-F5로 실행해보면 어떨까 싶고요,
이것이 F5로 실행한 결과와 같다면,
단순히 환경 차이로 생기는 문제로 보이고요,
이것이 독립실행한 것의 결과와 같다면
초기화 관련 문제를 의심해봐야할 것 같네요.
감사합니다. 드디어 자그마한 실마리를 찾았네요.
말씀하신데로 해본결과, 독립실행한것과 Ctrl-F5 의 결과가 같고 그냥 F5의 결과만 다릅니다.
초기화 관련문제라면 어떤것인지 설명해주실 수 있나요?
현재까지 대화로 보면 초기화 문제
현재까지 대화로 보면 초기화 문제 100%입니다.
변수 하나하나 확인하면서 정의할 때 0 넣었는지 확인하세요.
초기화 관련문제는 이런거죠..int foo(
초기화 관련문제는 이런거죠..
디버그모드에서는 자동으로 0으로 초기값이 채워집니다만,
릴리즈모드에서는 아니죠.
gcc의 경우 컴파일타임에서 대부분 warning이 뜨고,
valgrind에서 런타임 동작을 확인할 수 있습니다만,
windows환경에서는 잘 모르겠네요. 툴이 있겠지요.
차이가 나는 부분을 단계적으로 따라가보시는게 좋겠네요.
최적화 옵션을 끄고 release 모드로 해 보세요.
최적화 옵션을 끄고 release 모드로 해 보세요. 혹시 정확하게 동작하는지....
Debug에서 나온 결과와 같다면 최적화하는 과정에서 예상치 못하게 변경될 가능성이 있네요.
혹시 Release 모드에서 Debug(F5) 를
혹시 Release 모드에서 Debug(F5) 를 하신건가요?? 그럴 경우 결과가 달라집니다.
Debug 모드에서 F5를 하셔야 제대로 디버깅이 가능합니다
이유는 Release 모드에서는 Debug정보가 없기때문입니다.
댓글 달기