Я скомпилировал свою библиотеку (в частности, protbuf-2.3.0) используя -g -O0
на SunOS 5.10.
Примерная строка в журнале сборки выглядит следующим образом:
/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).
Есть идеи, что они не показывают мне имена моих функций?