Не удается отладить общую библиотеку - символы не загружаются должным образом

В настоящее время я пишу небольшую библиотеку и хочу проверить ее на наличие утечек (среди прочего); однако по какой-то причине 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.

As вы можете видеть, он не загружает отладочную информацию. Я не уверен, почему это так. Я построил и связал все с флагом -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...

Обратите внимание, что моя библиотека не выдает ошибку (символы отладки не найдены) - у кого-нибудь есть идеи, почему? Как я уже сказал, я не могу отладить это, запустив программу gdb ./memtest или отладив основной файл.

Спасибо за вашу помощь.

EDIT Это также может важно отметить, что (если вы не поняли путем пути) эта библиотека является локальной общей библиотекой (т.е. я использую -Wl, -rpath , чтобы связать / загрузить ее)

EDIT2 Похоже, моя версия GDB устарела. Теперь я обновился до последней версии с сервера CVS (я также пробовал последний выпуск , версия 7.2 ), и он может «загружать» символы. Моя общая библиотека информации теперь гласит следующее:

0x00e418b0  0x00e4be74  Yes         /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0

Однако я все еще не могу выполнить какие-либо функции (в общей библиотеке) - у кого-нибудь есть идеи?

EDIT3 Я также пробовал выполнить компоновку со статической библиотекой (libMyLIB.a), но она все еще не работает. Моя ОС - CentOS 5.6; кто-нибудь знает о каких-либо проблемах с этой системой? Кроме того, еще одно подтверждение того, что мои символы загружаются (по какой-то причине он просто не может пройти через какую-либо разделяемую функцию библиотеки)

(gdb) sharedlibrary MyLIB
Symbols already loaded for /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
13
задан Vadim Kotov 9 November 2017 в 10:58
поделиться