안녕하세요
GDB 관련 문제가 있어서 질문 올립니다...^^
임베디드 환경에서 프로그램을 개발중인데, 실행중 죽으면 gdb로 core 파일을 분석해서 죽은 위치를 알아내잖아요
그런데 dlopen 으로 열어서 사용하는 공유 라이브러리에서 죽은 경우에는 위치를 알아낼 수가 없는듯 합니다.
Call Stack 도 깨져서 나오더라구요. 원래 이런건가요?
그리고 해결할만한 방법이 있는지 궁금합니다.
도와주세요~~~
해당 공유 라이브러리의 디버깅 버전을 설치하셔야 합니다. 데비안의 예를 들어, GTK+에서 죽는다면, libgtk2.0-0 외에, libgtk2.0-0-dbg 를 더 설치합니다. 레드햇 계열도 마찬가지입니다.
답변 감사드립니다.
dlopen으로 여는 공유라이브러리는 제가 만들어서 -g 옵션으로 빌드한 라이브러리입니다.
dlopeen 으로 열여서 사용하는 라이브러리도 디버그 버전(-g옵션) 만 있으면 자동으로
core 파일에 포함되나요? 제가 확인한 core 파일에는 포함이 되지 않는듯 하더라구요.
core에는 포함이 되구요, 두 가지 문제가 있습니다.
1. gdb가 공유라이브러리를 찾는 문제 (gdb) help set solib-search-path 도움말을 보시고 적당한 디렉토리를 넣으시면 됩니다.
2. gdb가 공유라이브러리의 소스를 찾는 문제 (gdb) help directory 도움말을 보시고 적당한 디렉토리를 넣으시면 됩니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
공유 라이브러리 디버깅
해당 공유 라이브러리의 디버깅 버전을 설치하셔야 합니다. 데비안의 예를 들어, GTK+에서 죽는다면, libgtk2.0-0 외에, libgtk2.0-0-dbg 를 더 설치합니다. 레드햇 계열도 마찬가지입니다.
직접 -g 옵션으로 빌드한 공유 라이브러리입니다.^^
답변 감사드립니다.
dlopen으로 여는 공유라이브러리는 제가 만들어서 -g 옵션으로 빌드한 라이브러리입니다.
dlopeen 으로 열여서 사용하는 라이브러리도 디버그 버전(-g옵션) 만 있으면 자동으로
core 파일에 포함되나요? 제가 확인한 core 파일에는 포함이 되지 않는듯 하더라구요.
gdb 명령
core에는 포함이 되구요, 두 가지 문제가 있습니다.
1. gdb가 공유라이브러리를 찾는 문제
(gdb) help set solib-search-path
도움말을 보시고 적당한 디렉토리를 넣으시면 됩니다.
2. gdb가 공유라이브러리의 소스를 찾는 문제
(gdb) help directory
도움말을 보시고 적당한 디렉토리를 넣으시면 됩니다.
댓글 달기