GDB

development 2011. 1. 5. 16:05
- 메모리 주소로 braek point 거는법
break 명령으로는 address 에 대해 break 를 걸 수 없다. 

이럴 때는 watch 명령을 사용해야 하는데, watch 명령은 아래와 같이 세가지가 있다. 

  Write 상황시 : watch
  Read 상황시 : rwatch
  R/W  상황시 : awatch

(gdb) c
Continuing.
KmsgSourcePlugin::Initialize
[New Thread 0x7ffff5f6d700 (LWP 21295)]
KmsgSourcePlugin::Start
[Thread 0x7ffff5f6d700 (LWP 21295) exited]
[Inferior 1 (process 21292) exited normally]
(gdb) awatch *0x7ffff5f6d700
Hardware access (read/write) watchpoint 2: *0x7ffff5f6d700
(gdb) r
Starting program: /home/poplinux/work/ngsf/p2logd/work/output/bin/p2logd -c ./klog.conf
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=3, argv=0x7fffffffeb38) at main.cc:64
64 int main(int argc, char **argv) {
(gdb) c
Continuing.
KmsgSourcePlugin::Initialize
Hardware access (read/write) watchpoint 2: *0x7ffff5f6d700

Value = -168372480
0x00007ffff786a476 in pthread_create@@GLIBC_2.2.5 () from /lib/x86_64-linux-gnu/libpthread.so.0
(gdb) 

참조 링크


- 공유 라이브러리 디버깅
step 1. 공유 라이브러리를 디버깅 심벌을 넣어서 컴파일한다.

step 2. gdb 를 실행하여 아래와 같이 환경 설정을 한다.
   (gdb) set solib-search-path ./lib
   (gdb) set solib-absolute-prefix ../lib

    Reading symbols from /home/poplinux/work/vlc/vlc-1.0.2/output/lib/libvlc.so.2...done.
    Loaded symbols for /home/poplinux/work/vlc/vlc-1.0.2/output/lib/libvlc.so.2
    Reading symbols from /lib/tls/i686/cmov/libc.so.6...(no debugging symbols found)...done.
    Loaded symbols for /lib/tls/i686/cmov/libc.so.6
    Reading symbols from /lib/tls/i686/cmov/libpthread.so.0...(no debugging symbols found)...done.
    Loaded symbols for /lib/tls/i686/cmov/libpthread.so.0
    Reading symbols from /home/poplinux/work/vlc/vlc-1.0.2/output/lib/libvlccore.so.2...done.
    Loaded symbols for /home/poplinux/work/vlc/vlc-1.0.2/output/lib/libvlccore.so.2
    Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
    Loaded symbols for /lib/ld-linux.so.2
    Reading symbols from /lib/libdbus-1.so.3...(no debugging symbols found)...done.
    Loaded symbols for /lib/libdbus-1.so.3
    Reading symbols from /lib/tls/i686/cmov/librt.so.1...(no debugging symbols found)...done.
    Loaded symbols for /lib/tls/i686/cmov/librt.so.1
    Reading symbols from /lib/tls/i686/cmov/libdl.so.2...(no debugging symbols found)...done.
    Loaded symbols for /lib/tls/i686/cmov/libdl.so.2
    Reading symbols from /lib/tls/i686/cmov/libm.so.6...(no debugging symbols found)...done.
    Loaded symbols for /lib/tls/i686/cmov/libm.so.6
    Reading symbols from /usr/lib/gconv/EUC-KR.so...(no debugging symbols found)...done.
    Loaded symbols for /usr/lib/gconv/EUC-KR.so
    Reading symbols from /usr/lib/gconv/libKSC.so...(no debugging symbols found)...done.
    Loaded symbols for /usr/lib/gconv/libKSC.so

step 3. 디버깅을 한다.

step 4. 퇴근한다.


'development' 카테고리의 다른 글

[linux kernel]Scatter list  (1) 2011.09.27
[HW] TTL 과 RS232 에 대한 정리  (0) 2011.09.26
[HW] TTL Level 과 CMOS Level  (0) 2011.09.26
[crypto] IPSec  (0) 2011.09.23
GCC on-line  (0) 2011.09.22
GDB  (4) 2011.01.05
블로그 이미지

김유석0

댓글을 달아 주세요

  • vlc 디버깅 관련해서 2011.07.22 17:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 :) 저도 데모용으로 vlc를 디버깅 하려고 검색하다가 여기까지 왔네요
    gdb를 사용해서 동적 라이브러리를 디버깅 하려고 위에 쓰신 것처럼 환경설정을 해도
    gdb에서 Unable to debuf shared library initailizers 라고 나오던데.. 혹시 이유를 아시면 알려주실 수 있으신가요? >.<

  • 김유석0 2011.08.07 17:07 신고  댓글주소  수정/삭제  댓글쓰기

    전 그런 상황을 겪어 보지 못했는데 혹시 계정 열어 주시면 한 번 확인해 드리는 것은 가능할 것 같습니다.

  • ugg 2013.04.27 23:17  댓글주소  수정/삭제  댓글쓰기

    당신 매력있어, http://noq.botasuggel.com/ UGG Espa?a, 자기가 얼마나 매력있는지 모르는게 당신매력이야

  • nike free run 2 2013.04.28 20:42  댓글주소  수정/삭제  댓글쓰기

    그 사람됨을 알고자 하면 그의 친구가 누구인가를 알아보라.Topics related articles:


    http://ggtt79.tistory.com/38 新建文章 4

    http://whiterussian.tistory.com/17 新建文章 7

    http://48time.tistory.com/556 新建文章 3

    http://orlando.tistory.com/52 新建文章 11