2012-10-31 2 views
0

저는 RHEL WS 4.5에서 일하고 있습니다.업데이트 된 소스의 rpmbuild에서 GLIBC 디버그 정보가 필요합니다.

이 시스템과 일치하는 glibc 소스 rpm을 얻었습니다. rpm2cpio를 사용하여 내용을 가져 와서 열었습니다.

mtrace.c (더 많은 스택 백 트레이스 레벨을 추가하고 싶습니다)에 대한 패치를 작성하여 스펙 파일에 통합하고 debuginfo RPM을 포함한 새로운 RPM 세트를 작성했습니다.

테스트 VM (동일한 RH 기본 이미지에서 생성)에이 모든 것을 설치했으며 변경 사항이 포함되었는지 확인할 수 있습니다.

더 복잡한 실행에서는 mtrace.c가 작동하지 않지만 gdb가 디버그 정보를 찾을 수 없으므로 회선 번호 정보를 얻지 못하고 실제로 오류를 디버그 할 수 없습니다. 날짜를 기준으로

, 나는 디버그 정보가 /usr/src/debug/glibc-2.3.6/

의 테스트 시스템에 설치되어 있는지 확인할 수 있습니다 생각 나는 GDB에 sharedlibrary libc* 을 시도하고 기호가 이미로드되었음을 나타냅니다.

내 테스트에는 로컬로 빌드 된 파이썬이 포함되어 있으며 파이썬에는 전체 심볼이 있습니다.

필자의 생각은 아마도 glibc가 디버그가 활성화 된 rpmbuild에서 빌드되지 않는다는 것입니다. 나는 glibc.spec 파일을 검토하고, 심지어는 결과에 영향을 줄 수처럼 보였다 1로 정의

_enable_debug_packages

로 구축했습니다. rpmbuild 빌드 단계에서 호출 된 configure 스크립트에 대한 내 검토는 나에게 어떤 힌트도주지 않았다.

흠 .. 찾았습니다. /usr/lib/debug/lib/libc-2.3.4.so.debug 및 /usr/lib/debug/lib/tls/i486/libc-2.3.4.so입니다. 을 디버그하지만이 두 가지 모두 파일 명령에 의해 제거 된 것으로보고됩니다.

답변

0

당신이 일치하지 않는 RPM을 설치하는 것으로 나타납니다

/usr/src/debug/glibc-2.3.6
단지 발견 /usr/lib/debug/lib/libc-2.3. 4.so.debug

동일한 버전이 아닙니다. 같은 -debuginfo RPM에서 나온 방법은 없습니다.

이들 모두는 파일 명령에 의해 제거 된 것으로보고됩니다.

이들은 이 아니며은 스트립 된 것으로 표시되어야합니다. 제대로 제작되지 않았거나 strip이 파손되었습니다.

실제로 문제를 디버그하기 위해이 모든 작업을 수행 할 필요는 없습니다. RPMBUILD 디렉토리에서 full-debug libc.so.6과 함께 glibc 빌드 디렉토리를 찾을 수 있어야합니다. 라이브러리를 VM에 복사하면 debuginfo RPM에 대해 걱정할 필요가 없습니다.

+0

와우 ... 왜 2.3.6과 2.3.4의 불일치인지 눈치 채지 못했습니다. 난 그냥 rpm2cpio를 redid | cpio extract of : –

+0

다시 시도하겠습니다. 웹 사이트에서 캐리지 리턴 키를 사용하지 못하게합니다. –

+0

이것은 미친 짓입니다 ... 어떤 이유로이 상자에 새 줄을 쓸 수 없습니다 ... –

0

mtrace.c의 디버그 정보가 실제로 있는지 확인하십시오.

(gdb) set pagination off 
(gdb) start # pause your test program right after main() 
(gdb) set logging on 
Copying output to gdb.txt. 
(gdb) info sources 

다음 GDB를 종료 : GDB는 실제의 glibc-따라서 debuginfo의 RPM에서 소스 파일을 발견하면

$ eu-readelf -w /usr/lib/debug/lib64/libc-2.15.so.debug > t 
$ grep mtrace t 
      name     (strp) "mtrace.c" 
      name     (strp) "mtrace" 
1  0  0   0   mtrace.c 
[10480] "mtrace.c" 
[104bb] "mtrace" 
[5052] symbol: mtrace, CUs: 446 

은 다음을 참조하십시오 GLIBC에 대한 별도의 디버그 정보가 mtrace.c라는 컴파일 단위에 대해 알고있는 경우 먼저 참조 gdb.txt의 mtrace에 대한 grep과 비슷한 것을 찾을 수 있습니다. /usr/src/debug/glibc-2.15-a316c1f/malloc/mtrace.c

이것은 GDB 7.4에서 작동합니다. RHEL 4.5에 포함 된 GDB 버전이 위에 사용 된 모든 명령을 지원하는지 잘 모르겠습니다. 소스에서 GDB 업스트림을 빌드하는 것은 사실 파이썬보다 쉽습니다.

mtrace에 마찰 흔적을 추가 할 때 malloc()을 GLIBC malloc 후크에 직접 또는 간접적으로 호출하지 않도록하십시오.

관련 문제