Gdb: debugowanie biblioteki

Mam następujący roblem.

 

Napisałem bibliotę współdzieloną dla systemu Linux. Moje IDE to NetBeans. Napisałem przykładowy program.

Jeżeli ustawię breakpointa w programie, to działa,

Jeżeli ustawię breakpointa w bibliotece, to Netbeans nie wychwytuje momentu w którym program dochodzi do breakpointu w bibliotece.

Podejrzewam, że ustawiasz breakpoint, biblioteke kompilujesz bez tego breakpointa, a potem oczekujesz cudów włączając ją jako zależność. No więc czytaj link, powinno pomóc: http://www.ofb.net/gnu/gdb/gdb_28.html

 

Przejrzałem  podlinkowaną stronę, ale nigdzie nie ma linka do compile your program with breakpoint(lub coś w tym rodzaju), jak również po przejrzeniu set breakpoint nie znalazłem informacji na ten temat. W dodatku w podliknkowanej stronie nie ma informacji na ten temat.

Musisz najpierw skompilować bibliotekę w trybie debugowania.

Generalnie, dałem ci tę stronę, abyś przestał używać breakpointów przez klikanie w IDE, wtedy może zrozumiesz jak one działają.

Odpowiedz sobie na pytania:

  1. Jak działa debugger?

  2. Czym jest break point?

Poza tym słabo szukasz w podlinkowanych stronach: http://www.ofb.net/gnu/gdb/gdb_15.html#SEC15

Tak wygląda mój makefile:

MORPH_LIB = libfoo.so.1.0 LD_LIBRARY_PATH=`pwd`:`pwd`/Modules:$LD_LIBRARY_PATH $(MORPH_LIB): tao.o multilisted.o #gcc -g -fPIC -c [^p]*.c -ldl gcc -O0 -g -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o -ldl ln -fs libfoo.so.1.0 libfoo.so.1 ln -fs libfoo.so.1 libfoo.so tao.o: *.c gcc -g -O0 -fPIC -c [^p]*.c -ldl gcc -g -O0 -fPIC -c common/debug.c multilisted.o: gcc -c -fPIC common/multi_listed.c clean: rm *.o run: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) Demos/główny.c.o run-X11: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) MWIDGET_MODULE="morph-X11.so" Demos/główny.c.o run-gtk: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) MWIDGET_MODULE="morph-gtk.so" Demos/główny.c.o run-X112: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) Demos/główny.c.o --morph-module morph-X11.so run-gtk2: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) Demos/główny.c.o --morph-module morph-gtk.so run-shell: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) Demos/główny.c.o --morph-module shell.so run-ncurses: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) Demos/główny.c.o --morph-module morph-ncurses.so debug: LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) gdb Demos/główny.c.o 32bit: gcc --target=i386 -m32 -fPIC -c [^p]*.c -ldl gcc --target=i386 -m32 -g -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o -ldl gcc --target=i386 -m32 -g program.c -o program libfoo.so.1.0 import: svn commit all: make make -C Demos make -C Modules

Jak widać użyłem przełącznika -g .