В настоящее время я пишу небольшую библиотеку, и я хочу проверить ее на наличие утечек (между прочим); однако по какой-то причине gdb
не загружает библиотечные символы. Я прочитал много других сообщений здесь (и в других местах в Интернете) об этом, однако, я не могу найти решение. Вот что происходит:
Я компилирую общую библиотеку со следующими флагами (они включаются как в итоговую общую библиотеку, так и во все объектные файлы):
CFLAGS=-Wall -O0 -g -fPIC
Аналогично, я компилирую двоичный memtest
(клиентское приложение для библиотеки) для проверки утечек памяти и таких с помощью этих флагов
CFLAGS=-Wall -O0 -g
Теперь я ввел указатель NULL в библиотеку, чтобы проверить, могу ли я проследить его и "отладить" указатель (т.е. он приведет к сбою). Поэтому я пытаюсь запустить его через gdb, но это не выход. Вывод info sharedlibrary
одинаковый как для исполняемого файла, так и для ядра:
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
... Some libraries I am not worried about debugging...
0x00d37340 0x00d423a4 Yes (*) /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0 <--- My lib
.... and some more....
(*): Shared library is missing debugging information.
Как вы можете видеть, он не загружает отладочную информацию. Я не уверен, почему это так. Я создал и связал все с флагом -g
, и даже попробую -ggdb
и -g3
, но ничего не работает должным образом. Когда я загружаюсь в дамп ядра, это то, что я вижу:
...some libs...
Reading symbols from /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0...done.
Loaded symbols for /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
Reading symbols from /usr/lib/libstdc++.so.6...(no debugging symbols found)...done.
...some more libs...
Обратите внимание, как моя библиотека не дает ошибку (no debugging symbols found)
- у кого есть идеи, почему? Как я уже говорил, я не могу отладить это путем запуска программы gdb ./memtest
или путем отладки основного файла.
Спасибо за вашу помощь.
EDIT Также может быть важно отметить, что (если вы не понимаете по пути), эта библиотека является локальной общей библиотекой (т.е. я использую -Wl,-rpath
для связи/загрузки она)
EDIT2 Кажется, моя версия GDB устарела. Теперь я обновил последнюю версию с сервера CVS (я также пробовал последнюю версию version 7.2
), и он может "загружать" символы. Мой info sharedlibrary
теперь читает следующее:
0x00e418b0 0x00e4be74 Yes /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
Однако я все еще не могу выполнить какие-либо функции (в общей библиотеке) - у кого-нибудь есть идеи?
EDIT3 Я также пытался подключиться к статической библиотеке (libMyLIB.a), но он все еще не работает. Моя ОС - CentOS 5.6; Кто-нибудь знает какие-либо проблемы с этой системой? Кроме того, еще одно подтверждение того, что мои символы загружаются (по какой-то причине он не может пройти через какую-либо общую функцию lib)
(gdb) sharedlibrary MyLIB
Symbols already loaded for /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0