2012-11-16 4 views
1

공유 라이브러리의 디버그 버전을 사용해야합니다. 특히 우분투에 설치된 libpcap은 apt-get install libpcap0.8-dbg을 통해 설치해야합니다. ldd) ...하지만 실행 파일을 실행할 때 segfault ... 동적 링커가 라이브러리를로드 할 수 없습니다. objdump 사용 나는 Dynamic section이 비어있는 것을 볼 수 :공유 객체의 디버그 버전을 사용하는 방법

$objdump -p libpcap.so.1.1.1 
... 
Dynamic section: 

$ 

내가 ELF 공유 객체에 Dynamic section의 일부 필드가 그래서 ... 필수라고 생각,이 부분이 비어있는 이유는 무엇입니까? 어쩌면 올바르게로드하는 다른 방법이 있습니까?

답변

2

실행 시도 할 수 있습니다. 이것들은 eu-strip이나 유사한 도구로 잘라낸 부분 일뿐입니다. 당신은 그들과 연결해서는 안됩니다. 실제로 앱을 다시 링크 할 필요가 없습니다. 도구가 스스로 할 수 없다면 gdb, valgrind 또는 다른 디버깅 정보 소비자에게 실제 디버깅 전에 읽도록 ​​지시해야합니다.

+0

라이브러리의 디버그 버전에는 .text, .data, etc ... 섹션이 있습니다. 유일한 디버그 것들 그래서 그것은 비 디버그 버전의 동일하지만 디버그 syms 컴파일 된 것 같아요. – MirkoBanchi

+1

이 버그를 확인해보십시오. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=462456 –

+0

감사합니다 ... 이것은 매우 유용합니다. – MirkoBanchi

0

당신은 내가 우분투를 사용하지 않지만, AFAIK 디버그 패키지 라이브러리 나 바이너리의 전체 버전, 그들로부터 단지 제거 디버깅 정보를 포함하지 않는 솔직히 LD_LIBRARY_PATH=/usr/lib/debug/

+0

문제는 라이브러리를 찾지 못하는 동적 링커가 아니라로드 할 때 segfaults입니다 (LD_DEBUG = 모든 env 변수로 확인). LD_PRELOAD도 시도했지만 결과는 같습니다. – MirkoBanchi

+0

그런 다음'libpcap0.8-dbg'을 제거하고 다시 설치하거나'CFLAGS = -g'로 업스트림'libpcap'을 사용하여 컴파일하십시오. –

관련 문제