효과적인 임베디드 디버깅 환경구축

12
효효효효 효효효효 효효효효효 효효 효효효효효효효 효효효 Using GNU Debuger

Upload: guest0ad316e

Post on 12-Jun-2015

2.387 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: 효과적인 임베디드 디버깅 환경구축

효과적인 임베디드 디버깅환경 구축

교통임베디드팀 오화종

Using GNU Debuger

Page 2: 효과적인 임베디드 디버깅 환경구축

• 프로그램이 실행중 또는 멈췄을때 시스템 내부를

관찰 , 조작 할수 있게 해주는 프로그램

• 리눅스에서 일반적으로 사용되는 디버거

• 임베디드 리눅스 환경에서 사용하기 위해서는 포팅 ,

셋업 과정이 필요함

What is GDB?

Page 3: 효과적인 임베디드 디버깅 환경구축

• 브레이크포인트를 통한 단계적 실행

• 메모리 및 레지스터 값 보기 /변경

• 스택 프레임 , 백트레이스 정보 보기

• 함수별 모듈 테스트

• 시그널 테스트

• 코어파일 디버깅

• 멀티프로세스 프로그램 디버깅

• 멀티스레드 프로그램 디버깅

• 어셈블리 코드 보기 /변경

• 성능 튜닝

What can GDB do ?

Page 4: 효과적인 임베디드 디버깅 환경구축

• 브레이크 포인트 , 변수값 보기 , 변수값 변경

Example

Page 5: 효과적인 임베디드 디버깅 환경구축

• 스택 프레임 백트레이스 정보 보기

Example

Page 6: 효과적인 임베디드 디버깅 환경구축

• 함수 모듈별 테스트

Example

Page 7: 효과적인 임베디드 디버깅 환경구축

• 멀티 스레드 프로그램 디버깅

Example

Page 8: 효과적인 임베디드 디버깅 환경구축

① termcap 빌드A. wget ftp://ftp.jaist.ac.jp/pub/GNU/termcap/termcap-1.3.1.tar.gz

B. tar xvzf termcap-1.3.1.tar.gz

C. cd termcap-1.3.1

D. CC=arm-linux-gcc ./configure --build=i686-linux --host=arm-linux --prefix=$PWD/build

E. make && make install termcap-1.3.1

② Native gdb 빌드A. wget ftp://ftp.jaist.ac.jp/pub/GNU/gdb/gdb-6.6.tar.gz

B. tar xvzf gdb-6.6.tar.gz 

C. cd gdb-6.6

D. CFLAGS=-Ltermcap-1.3.1 ./configure --build=i686-linux --host=arm-linux --target=arm-

linux --prefix=$PWD/build

E. make && make install gdb (4MB)

③ Cross gdb 빌드 – gdb & gdbserverA. ./configure --build=i686-linux --host=i686-linux --target=arm-linux --prefix=$PWD/build

B. make && make install arm-linux-gdb (9.8MB)

C. cd gdb/gdbserver

D. CC=arm-linux-gcc ./configure --host=arm-linux --target=arm-linux

E. make && make install gdbserver (160KB)

How to Build GDB for Embedded Linux ?

Page 9: 효과적인 임베디드 디버깅 환경구축

① gdb & gdbserver 설치

/mnt/mtd8/bin

② Native gdb 사용시 필요한 공유 라이브러리 설치• libexpat.so.1

• libncurses.so.5

• libthread_db.so.1

/mnt/mtd8/lib

③ 공유 라이브러리 패스 설정

export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:

/mnt/mtd8/lib:

단말기 Setup

Page 10: 효과적인 임베디드 디버깅 환경구축

• Setup Initial file : ~/.gdbinit set listsize 50

set height 90

set width 0

set print array on

set print pretty on

set prompt \001\033[1;31m\002(gdb) \001\033[0m\002

define cls

shell clear

end

# std::string

define pstring

call printf "String \t\t\t= \"%s\"\n", $arg0._M_data()

printf "String size/length \t= %u\n", $arg0._M_rep()._M_length

printf "String capacity \t= %u\n", $arg0._M_rep()._M_capacity

printf "String ref-count \t= %d\n", $arg0._M_rep()._M_refcount

end

Customize

• Setup Project file : ./.gdbinit break main

command

print argc print

argv

end

run

Page 11: 효과적인 임베디드 디버깅 환경구축

• Compile with Makefile CFLAGS = -g –W -Wall

tar cf PROG.tar PROG ./src/*.c ./include/*.h

• Native gdb ftpget 192.168.48.162 PROG.tar PROG.tar

tar xvf PROG.tar

gdb PROG

• Cross gdb in target $ gdbserver 192.168.48.162:9898 PROG

int host $ arm-linux-gdb 192.168.48.38 PROG

Start Debugging

• /mnt/mtd8/bin/loadgdb #!/bin/sh

rm –rf $1 $1.tar

ftpget 192.168.48.162 $1.tar $1.tar

tar xvf $1.tar

gdb $1

Page 12: 효과적인 임베디드 디버깅 환경구축

원격 빌드

• 임베디드 리눅스 SW 개발 생산성 향상을 위한 원격 빌드 환경 구축 .doc