타겟보드에서 실행되는 프로세스를 디버깅하기 위해서는
호스트에 gdb, 타겟보드에는 gdbserver가 실행되어 있어야 한다.
따라서 타겟보드에서 실행되는 gdbserver를 컴파일하기 위해서는...
아래와 같은 작업이 필요하다.
gdb 6.0 설치하기
==================
wget ftp://ftp.gnu.org/gnu/gdb/gdb-6.0.tar.gz
tar xvpfz gdb-6.0.tar.gz
cd gdb-6.0
./configure --target=arm-linux
make
cd gdb/gdbserver/
chmod ugo+x configure => 실행권한이 없어 실행이 안된다. 따라서 실행모드 변경함.
./configure --target=arm-linux --host=arm-linux
vi config.h
=> 39번째줄을 주석처리한다.
=> /*#define HAVE_SYS_REG_H 1 */
make CC=arm-linux-gcc
ls /home/src/gdb-6.0/gdb/gdbserver/gdbserver
ls /home/src/gdb-6.0/gdb/gdb
[root@e-linux gdbserver]# arm-linux-objdump -x gdbserver | grep NEEDED
NEEDED libthread_db.so.1
NEEDED libc.so.6
[root@e-linux gdb]# objdump -x gdb | grep NEEDED
NEEDED libtermcap.so.2
NEEDED libm.so.6
NEEDED libdl.so.2
NEEDED libc.so.6
cp gdb /usr/local/arm/2.95.3/bin/arm-gdb
cp gdbserver /home/src/Temp => 타겟보드와 NFS로 연결됨
target>> cd /mnt/host
target>> cp gdbserver /bin => 타겟보드에 복사된 gdbserver를 /bin에 복사함
호스트에서 아래 파일을 생성함
vi debug.c
=>
#include <stdio.h>
int main()
{
int i;
for (i=0; i<10; i++)
printf("hello, world!\n");
return 0;
}
컴파일 하기... -g 옵션을 주어야 디버깅 정보를 포함하게 된다.
arm-linux-gcc -g -o debug debug.c
cp debug /home/src/Temp => 타겟보드에 복사, NFS로 연결되어 있다.
target>> cp debug /bin
target>> cd /bin
target>> ./gdbserver 10.10.1.1:2002 debug => 타겟보드에서 gdbserver 실행
./gdbserver: error while loading shared libraries:
cannot open shared object file:
=> error -_-;;
타겟보드의 ls /lib을 해보면 libthread_db-1.0.so가 없다.
따라서 arm사의 ftp를 통해서 cross-compiler toolchain을 받아서
호스트에 풀고 해당 모듈을 타겟에 복사해 준다.
cd /home/src/2.95.3/arm-linux/lib
cp libthread_db-1.0.so /home/src/Temp
target>> cp /mnt/host/libthread_db-1.0.so /lib
target>> ln -s libthread_db-1.0.so libthread_db.so
target>> ln -s libthread_db-1.0.so libthread_db.so.1
target>> ./gdbserver 10.10.1.1:2002 debug => 다시 gdbserver 실행시도
=> Process debug created; pid = 125
host>> cd /usr/local/arm/2.95.3/bin
./arm-gdb debug
(gdb) target remote 10.10.1.2:2002
Remote debugging using 10.10.1.2:2002
0x40002a90 in ?? ()
(gdb) list
No symbol table is loaded. Use the "file" command.
=> 심볼파일이 로딩이 안되네. 쩝... -_-;;
=> debug 프로그램이 해당 디렉토리에 없어서 발생한 문제이다.
cd /root => 여기에 debug 프로그램이 존재한다.
arm-gdb debug
(gdb) target remote 10.10.1.2:2002
Remote debugging using 10.10.1.2:2002
0x40002a90 in ?? ()
(gdb) list
1 #include <stdio.h>
2
3 int main()
4 {
5 int i;
6 for (i=0; i<10; i++)
7 printf("hello, world!\n");
8
9 return 0;
10 }
(gdb)
아래와 같은 명령어를 실행해 본다.
continue
display i
step
[출처] [본문스크랩] gdb 및 gdbserver 컴파일 및 간단한 사용기|작성자 쿠마
'OS > Linux' 카테고리의 다른 글
vi(vim) 을 source insight 처럼 사용하기 (0) | 2012.03.09 |
---|---|
리눅스에서 사용되는 메모리 모델을 이해 (0) | 2012.03.09 |
리눅스 압축 - tar zip gz bz2 정리 (0) | 2012.03.09 |
VIM. Plugin - Taglist (0) | 2012.03.09 |
ctags & cscope 설치 및 사용 (0) | 2012.03.09 |