manywaypark's Blog
개발, 검색, 함수

'gdb'에 해당되는 글 2건

  1. 2014.04.24 gdb로 erlang runtime을 debugging하기.
  2. 2014.04.17 gdb No symbol in current context.

nif(c/c++ shared object)를 erlang runtime에 올려서 쓰다보면 gdb를 사용할 일이 생긴다.

/usr/bin/erl은 shell script다.

그 내용을 보고 환경변수만 맞추어주면 된다. 아래처럼 한다.

# (emacs라면, M-x gdb 후에)

gdb --annotate=3 /usr/lib/erlang/erts-5.8.5/bin/beam.smp

......

(gdb) set environment ROOTDIR /usr/lib/erlang

(gdb) set environment BINDIR /usr/lib/erlang/erts-5.8.5/bin

(gdb) set environment EMU beam

(gdb) set environment LD_LIBRARY_PATH /path/to/lib:/usr/local/lib:/usr/lib  # optional, 은밀한(?) 곳에 so가 있다면 설정.

(gdb) cd /path/to/working/dir    # optional, 보통 beam.smp가 있는 곳으로 cwd가 바뀌므로 다시 설정한다.

(gdb) r -- -root /usr/lib/erlang -progname erl -- -home /path/to/home -- -sname optional-node-short-name -pa ./ebin

......

주의할 점은, erlang REPL에 들어가고 나면 마땅히 break point를 설정할 방법이 없으므로 REPL 진입전에 break point를 설정해야 한다는 것이다.


happy hackin'


2014-12-22 추가: 

참고 링크(이게 더 간단한가?) http://blog.dizzyd.com/blog/2009/12/18/running-erl-in-a-debugger/ 

요점은 bin/erl을 이렇게 바꾸고 실행한다.

if [ ! -z "$USE_GDB" ]; then gdb $BINDIR/erlexec --args $BINDIR/erlexec ${1+"$@"} else exec $BINDIR/erlexec ${1+"$@"} fi


분명히 현재 scope에 nUnit이라는 변수가 있음에도 불구하고 아래처럼 symbol을 제대로 찾지 못했다.


......

(gdb) p nUnit

No symbol "nUnit" in current context.

(gdb)


gcc4.8 + gdb7.5에서는 컴파일 옵션에 "-g -gdwarf-2"를 줘야 제대로 동작한다.

즉 debug build는 아래처럼 configure한다.

./configure --prefix=/path/to/prefix CPPFLAGS=-DDEBUG CXXFLAGS="-g -gdwarf-2 -O0"


refs:

http://stackoverflow.com/questions/12595631/debugging-with-gdb-on-a-program-with-no-optimization-but-still-there-is-no-symbo


happy hackin'

1 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

03-29 04:16