Я скомпилировал свою библиотеку (в частности, protbuf-2.3.0 ), используя -g -O0
на SunOS 5.10.
Пример строки в журнале make:
/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -D_REENTRANT -pthreads -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -g -O0 -MT text_format.lo -MD -MP -MF .deps/text_format.Tpo -c -o text_format.lo `test -f 'google/protobuf/text_format.cc' || echo './'`google/protobuf/text_format.cc
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -D_REENTRANT -pthreads -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -g -O0 -MT text_format.lo -MD -MP -MF .deps/text_format.Tpo -c google/protobuf/text_format.cc -fPIC -DPIC -o .libs/text_format.o
И затем я прикрепил свой gdb, выполнив следующие шаги:
- Запустите мое приложение (в данном случае мой веб-сервер, который запускает веб-приложение java, которое использует библиотеку через jni во время запуска).
- Я подключил свой gdb к этому процессу через
gdb -p XXX
(где XXX - это pid, полученный от ps
).
- И затем я загрузил свою библиотеку из GDB, используя
file libprotobuf.so
из приглашения GDB.
Но я не вижу названия своих функций из bt
. Моя команда обратной трассировки GDB показывает что-то вроде этого:
(gdb) bt
#0 0xf8f98914 in ?? ()
#1 0xf8f98830 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Я также пытался делать только # 1 & # 2, только # 1 & # 3 и # 1 & gdb libprotobuf.so -p XXX
.
Кроме этого, я также попытался запустить свой jvm в режиме отладки и добавил точку останова для команды System.loadLibrary(..)
, и, перешагнув через эту команду, я снова выполнил процесс присоединения к gdb .... но все равно ничего.
Однако я могу поставить точки останова с заданными именами функций и перечислить содержимое функции через list
. Но опять же, я могу размещать точки останова, но они не останавливаются также и на этих именах функций (я знаю, что это пошло к этой функции, потому что она находится в отчете jvm hs_err_pid после каждого сбоя jvm).
Есть идеи, что мне не показывают имена моих функций?