- 메모리 주소로 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 |