dlopen으로 열어서 사용하는 공유 라이브러리에서 죽은 위치 알아낼 수 있나요?

solitair의 이미지

안녕하세요

GDB 관련 문제가 있어서 질문 올립니다...^^

임베디드 환경에서 프로그램을 개발중인데, 실행중 죽으면 gdb로 core 파일을 분석해서 죽은 위치를 알아내잖아요

그런데 dlopen 으로 열어서 사용하는 공유 라이브러리에서 죽은 경우에는 위치를 알아낼 수가 없는듯 합니다.

Call Stack 도 깨져서 나오더라구요. 원래 이런건가요?

그리고 해결할만한 방법이 있는지 궁금합니다.

도와주세요~~~

feanor의 이미지

해당 공유 라이브러리의 디버깅 버전을 설치하셔야 합니다. 데비안의 예를 들어, GTK+에서 죽는다면, libgtk2.0-0 외에, libgtk2.0-0-dbg 를 더 설치합니다. 레드햇 계열도 마찬가지입니다.

solitair의 이미지

답변 감사드립니다.

dlopen으로 여는 공유라이브러리는 제가 만들어서 -g 옵션으로 빌드한 라이브러리입니다.

dlopeen 으로 열여서 사용하는 라이브러리도 디버그 버전(-g옵션) 만 있으면 자동으로

core 파일에 포함되나요? 제가 확인한 core 파일에는 포함이 되지 않는듯 하더라구요.

feanor의 이미지

core에는 포함이 되구요, 두 가지 문제가 있습니다.

1. gdb가 공유라이브러리를 찾는 문제
(gdb) help set solib-search-path
도움말을 보시고 적당한 디렉토리를 넣으시면 됩니다.

2. gdb가 공유라이브러리의 소스를 찾는 문제
(gdb) help directory
도움말을 보시고 적당한 디렉토리를 넣으시면 됩니다.