심볼을 제거한 후의 코어 파일

심볼을 제거한 후의 코어 파일

g++ 4.3을 사용하여 애플리케이션을 구축 중입니다. 해당 옵션을 사용하는 대신 가능한 최대 최적화 수준을 사용하고 -g있으며 빌드 후에 기호를 제거하고 있습니다.

내 애플리케이션과 라이브러리에서 기호를 제거하지 않아도 핵심 파일이 여전히 유용합니까? (애플리케이션이 충돌할 때 생성됩니다.)

가능한 최대 최적화로 애플리케이션을 컴파일하는 경우 코어 파일이 유용합니까? (옵션도 없고 -g스트립 기호도 없습니다.)

답변1

일반적으로 코어 파일은 프로세스에서 사용하는 전체 메모리와 CPU 레지스터 상태의 덤프입니다. 따라서 일반적으로 코어 파일에서 검색할 수 있는 정보는 충돌이 발생하기 전에 프로세스에 디버거를 연결하여 얻을 수 있는 정보와 동일합니다.

만약 내가한다면아니요내 애플리케이션과 라이브러리에서 기호를 제거해도 핵심 파일이 여전히 유용합니까?

위키피디아 페이지에서코어 덤프:

"최신 Unix 계열 운영 체제에서 관리자와 프로그래머는 GNU Binutils 바이너리 파일 설명자 라이브러리(BFD)를 사용하여 코어 덤프 파일을 읽을 수 있습니다. [...] 원시 데이터는 코어 덤프에서 나옵니다. 따라서 코어 덤프를 읽기 위해 라이브러리를 사용하는 애플리케이션은 변수의 주소를 결정하고 데이터 구조 자체의 레이아웃을 결정해야 합니다(예: 프로그램에 대한 기호 테이블 '' 사용). 디버깅 중입니다.

따라서 첫 번째 질문에 대한 답변은 다음과 같습니다.아니요,실행 파일에서 기호가 제거되면 코어 덤프 파일은 거의 쓸모가 없습니다.

그러나 기호는 일부 디스크 공간만 차지하며 성능에 영향을 주지 않습니다. 최대 최적화로 컴파일할 수 있습니다.그리고 -g동시에.

가능한 최대 최적화로 애플리케이션을 컴파일하는 경우 코어 파일이 유용합니까?

코어 파일은 애플리케이션 충돌 당시의 메모리 및 프로세서 상태의 덤프이므로 최적화 및 디버깅에 대한 일반적인 경고가 적용됩니다. 디버거는 정보(예: 변수 값 또는 함수 호출)만 찾습니다. 함수 내에서). 스택 추적) 최적화되지 않은 경우.

관련 정보