2016-11-13 2 views
2

최근에는 그래픽 엔진 프로그램에 물리 엔진을 통합하는 작업을하고 있습니다. 전에 디버그는 안전하고 더 많은 정보를 통해 잘못된 위치를 알려주므로 항상 디버그 모드로 프로그램을 빌드합니다.디버그 모드 또는 릴리스 모드

내 프로그램에서 릴리스 모드에서 Assimp를 빌드했지만 여전히 디버그 모드에서 사용했습니다. 지금은 릴리스 모드에서 Bullet Physics를 빌드합니다. 성능의 차이는 디버그 모드에서 매우 다릅니다. 얼마나 느린지 알고 싶으면 this을 볼 수 있습니다.

중요한 것은

은 내가 디버그 모드에서이 * lib 디렉토리 파일을 사용할 수 없다는 것을, 그래서 질문, 또는 왜 당신이 디버그 모드에서 또는 다른 한편으로에 모드를 해제하도록 변경 않습니다. 또는 디버그 모드에서 릴리스 라이브러리를 사용 하시겠습니까? 당분간, Bullet Physics에서 Release 모드로 영구히 변경해야하며, 이것이 좋은지 나쁜지 모르겠다.

편집 :

내가 유래에서 가능한 중복 기사가 많이 있기 때문에, 릴리스 및 디버그 모드에 대한 benifit을 알고 있지만, 여러분이 프로그램을 할 때 내가 알고 싶은 것은 무엇인지 결정 선택 또는 단지 performace 문제가 발생하기 때문에 나 같은 릴리스 모드로 프로그램을 다시 작성해야합니다. 가능한 한 중복 된 기사 사이에 약간 다른 점을 분명히하고 싶습니다.

이 질문에는 네 가지 사례가 있습니다.

사례 1. 이유로 인해, 디버그 모드에서 새 프로젝트 및 프로그램을 시작합니다 ....

사례 2. 새 프로젝트를 시작하고 ... 릴리스 모드로 프로그래밍하십시오.

사례 3 디버그 모드에서 일정 기간 동안 작동하지만 릴리스 모드로 변경됩니다.

사례 4 릴리스 모드에서 일정 기간 동안 작동하지만 디버그 모드로 변경됩니다.

저는 정말로 네 가지 경우에 어떤 결정이 필요한지 알고 싶습니다. 나는 Bullet Physics의 performace 덕분에 3을 맞이했다. 나는 release mode로 영원히 프로그램을 만들고, 다른 디버그 라이브러리를 release mode로 재 빌드하기로 결정했다. 경우 3, 질문은, 난 그냥 제 3 자 라이브러리를 사용하고, 그래서 어떤 이유로 디버그 모드를 사용해야합니까? 아니면 그냥 모드를 풀어 가려고?

경우 1 & 2의 경우 디버그 모드 또는 릴리스 모드에서 새 프로그램을 빌드하게하는 이유가 있습니까?

사례 4의 경우 사람이 릴리스 모드를 디버그 모드로 변경하는 이유를 생각할 수 없지만 실제 사례가있을 수 있습니다. 단지이 결정을 내릴 수있는 라이브러리를 만드는 것만 빼고.

제 질문에 대한 답변이 충분하지 않으면 알려주십시오.

+1

코드에서 버그를 제거하려면 항상 디버그 빌드로 시작하십시오. 그런 다음 릴리스 빌드를 테스트하여 처음에 C++을 선택한 이유를 확인해야합니다. 예상되는 전체 데이터 세트를 사용하여 프로그램의 성능이 충분한 지 확인해야합니다. 그리고 그렇지 않다면 핫스팟을 찾기 위해 프로파일 러가 필요합니다. 릴리즈 빌드는 항상 배포하십시오. –

+1

gdb, lldb, Visual Debugger와 같은 디버거는 릴리스 모드에서 사용하기가 매우 어렵습니다. 일부 기능이 누락되어 (인라인) 명령 재배치를 통해 단계 명령에서 앞뒤로 이동할 수 있습니다. 디버거는 버그를 찾는 데 매우 효율적인 도구이므로 사용하지 않으려는 경우가 아니면 디버그 모드로 시작하는 것이 좋습니다. – Franck

+1

동일한 디버그 코드가 릴리스 빌드로 인해 프로그램을 중단시킬 수 있으므로 디버그 빌드가 자동으로 일부 정의되지 않은 동작 클래스를 처리하는 경향이 있으므로 집중적 인 테스트가 거의 독점적으로 릴리스 빌드에서 수행되어야한다는 점에 유의해야합니다. – Jack

답변

0

디버깅해야 할 때 디버그 (최적화되지 않은) 빌드를 사용하십시오. 소스 코드와 밀접하게 일치하는 (느린) 코드를 생성하므로보다 쉽게 ​​디버깅 할 수 있습니다.

출시 된 코드에 대해 릴리스 (최적화 된) 빌드를 사용하십시오.그들은 lot (더 자주 발생합니다)을 실행하는 코드를 생성하지만 생성 된 코드가 자주 작성한 소스와 매우 다르기 때문에 최적화 된 코드를 디버깅하는 것은 실제로 어렵습니다.

동일한 프로그램에서 디버그/릴리스로 작성된 개체를 혼합하는 것은 종종 재난 (충돌) (특히 Microsoft 컴파일러 사용)을위한 레시피입니다. 그러지 마세요.

+0

참고 Microsoft 컴파일러에서는 (부분적으로) 디버깅 할 수있는 최적화 된 코드를 가져 오는 "RelWithDebInfo"모드를 제안합니다. – jpo38

1

"디버그 모드"및 "릴리스 모드"는 미리 정의 된 두 개의 컴파일러 스위치 집합입니다. 그러나이를 무시하고 중간 양식을 작성할 수 있습니다. C++은 일반적으로 인라이닝에서 많은 이점을 얻습니다. 따라서 인라인 빌드를 사용하는 디버그는 합리적인 중간 형식입니다. 또 다른 일반적인 변형은 디버그 빌드에서도 C & C++ 라이브러리의 릴리스 버전을 사용하는 것입니다.

개별 파일 수준의 스위치를 무시할 수도 있습니다. 총알 물리학이 맞을 가능성이 있으므로

으로 컴파일 할 수 있는지 확인하고 싶습니다. 그렇다면 다른 문제를 해결할 때 디버그 모드와 릴리스 모드를 전환하는 것이 일반적입니다.

관련 문제