2013-12-10 6 views
10

저는 거대한 C++ 프로젝트에서 작업하고 있습니다.이 프로젝트에는 300MB에 달하는 거대한 소스와 800 개 이상의 파일이 있습니다. 바이너리 충돌이 발생할 때 호출 스택을 가져 오려고합니다. 그래서 신호를 캡처하고 backtrace_symbols에서 파일로 호출 스택을 작성했습니다. 하지만 backtrace_symbols에서 심볼 이름을 얻으려면 필자는 링커 플래그 '-rdynamic'을 사용하여 컴파일했습니다. 나는 '-rdynamic'을 사용하여 어떤 문제에도 영향을 준다는 것을 알고 싶다. rdynamic gcc 옵션의 영향/단점

나는 그것이 성능에 영향을 미친다는 것을 알고

, Will adding the -rdynamic linker option to gcc/g++ impact performance?

하지만 상당히 성능에 영향을 않습니다 ..?

내 소스 코드를 노출합니까? ..? [나는 그렇지 않다는 것을 안다, 나는 그저 확신하고 싶다]

총 실행 시간이나 시작 시간에 영향을 미칩니 까?

'rdynamic'의 단점은 무엇입니까?

답변

11

Q : 성능에 상당히 영향이 있습니까?

A : 나는 더 큰 프로젝트에서 저하없이 사용했습니다.

Q : 내 소스 코드를 노출합니까? ..?

A : 아니오, 단지 함수 이름을 노출합니다.

Q : 전체 런타임 성능 또는 시작 시간에 영향을 줍니까?

대답 : 제 경험으로는 아니오입니다. 대부분의 기능은 이미 내보내졌습니다. 일반적으로 이것은 정적 함수를 추가합니다.

Q : 'rdynamic'의 단점은 무엇입니까?

A : rdynamic을 dlopen()과 함께 사용하면 내 프로젝트의 필수 항목 인 실행 파일에 대한 공유/전역 기호 테이블을 가질 수 있습니다 (dynamic_cast <> SO 경계에서 작동 함). 단점은 SO 간의 함수 이름 충돌입니다.