nintyfan
(nintyfan)
16 Maj 2014 17:39
#1
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.
nintyfan:
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
nintyfan
(nintyfan)
17 Maj 2014 09:44
#3
kostek135:
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:
Jak działa debugger?
Czym jest break point?
Poza tym słabo szukasz w podlinkowanych stronach: http://www.ofb.net/gnu/gdb/gdb_15.html#SEC15
nintyfan
(nintyfan)
17 Maj 2014 17:56
#6
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 .