문제

릴리스 빌드 모드와 디버그 빌드 모드의 차이점을 이해하고 있다고 생각합니다.주요 차이점은 디버그 모드에서는 생성된 실행 파일이 최적화되지 않고(디버깅이 더 어려워질 수 있음) 디버그 기호가 포함된다는 것입니다.

WinMerge의 외부 종속성 중 하나인 PCRE를 빌드하는 동안 이전에는 볼 수 없었던 빌드 모드를 발견했습니다.RelWithDebInfo.

Debug와 RelWithDebInfo의 차이점은 다음과 같습니다. http://www.cmake.org/pipermail/cmake/2001-October/002479.html.발췌:"RelwithDebInfo는 릴리스 모드와 매우 유사합니다.완전히 최적화된 코드를 생성할 뿐만 아니라 프로그램 데이터베이스를 구축하고 디버그 라인 정보를 삽입하여 디버거가 언제든지 코드의 위치를 ​​추측할 수 있는 좋은 기회를 제공합니다."

이것은 정말 좋은 생각처럼 들리지만 설정 방법이 반드시 명확하지는 않습니다.이 링크는 VC++에 대해 이를 활성화하는 방법을 설명합니다. http://www.cygnus-software.com/papers/release_debugging.html

뭔가 빠졌나요? 아니면 모든 릴리스 코드를 RelWithDebInfo로 컴파일하는 것이 의미가 없나요?

도움이 되었습니까?

해결책

내가 무언가를 놓치고 있습니까, 아니면 모든 릴리스 코드를 RelwithDebinfo로 컴파일하는 것이 합리적이지 않습니까?

디버깅 정보에 대해 고객을 얼마나 신뢰하는지에 따라 다릅니다.

추가 정보:

gcc는 디버깅 정보를 개체 코드로 인코딩합니다.

다음은 gcc에 해당하는 pdb입니다.

빌드 대상 외부에서 gcc 디버그 기호를 생성하는 방법은 무엇입니까?

참고로 cmake는 기본적으로 이 접근 방식을 지원하지 않는 것 같습니다.

다른 팁

제가 아는 한, 해당 디버그 기호를 내부에 저장하지 않고 고객에게 코드를 배송하는 것은 생산 문제를 디버깅할 때 탈모를 초래하는 방법입니다.

디버그 기호를 사용하여 릴리스 빌드를 디버깅하는 것은 디버그 빌드를 디버깅하는 것과 거의 다르지 않으므로 항상 이 작업을 수행하는 것이 좋습니다.

즉, 단점이 있는지는 모르겠습니다.그렇다면 듣는 것이 흥미로울 것입니다.

최적화된 릴리스 빌드를 디버깅하려고 시도한 후에는 이것이 다른 방법이 없을 때만 수행하고 싶은 작업인 이유를 알게 됩니다.

기본적으로 이것이 필요한 두 가지 경우가 있습니다.

  • 디버그 빌드에서는 나타나지 않는 문제가 있어서 릴리스 빌드를 디버그해야 합니다.
  • 고객에게 충돌이 발생하고 로컬에 저장된 디버그 정보를 사용하여 충돌을 이해합니다.

당신은 어떨지 모르겠지만 지난 10년 동안 두세 번 릴리스 코드를 디버그해야 했고 고객의 충돌이 문제가 되지 않는 회사에서 일할 수 있었습니다.

예, 릴리스 빌드에 대한 디버그 정보도 갖는 것이 좋은 생각일 수 있지만 VS는 이런 식으로 설정하지 않으며 매 10년마다 필요한 두 가지 경우에 대해 수동으로 설정할 가치가 없습니다. 시간.CMake는 무료로 제공하므로 그렇게 하세요.

프로덕션 코드에는 디버깅 정보가 전달하는 크기가 너무 커질 필요가 없습니다.

릴리스 빌드를 위해 디버그 정보가 생성되는 경우에도 디버그 빌드보다 디버깅 목적에 훨씬 덜 유용합니다.그 이유는 많은 변수와 중간 표현식이 최적화되어 디버거에서 사용할 수 없기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top