GDB, как установить точку останова в динамической библиотеке, открытой Dlopen

0

Во второй половине дня, Everbody. У меня есть приложение 'test', скомпилированное main.c. Динамический liabrary 'libtest.so', который скомпилирован test.cpp с '-g'. В main.c я вызываю "libtest.so" с помощью "dlopen". И теперь я хочу установить контрольную точку в test.cpp, но gdb никогда не ударил ее. Я делаю следующее:

gdb./test -d/home/lcl/test

break test.cpp: 35

бег

может кто-нибудь дать мне несколько советов, спасибо!

  • 0
    спасибо, что ответили мне, -d просто чтобы указать каталог для поиска GDB. как команда dir
  • 0
    Я попробовал это. строка № 35 просто имя функции. если я скомпилирую test.c с помощью 'gcc -c main.c -o test -ltest -L./', я могу установить точку останова, но при открытии с помощью dlopen произошла ошибка ...
Показать ещё 3 комментария
Теги:
gdb
dlopen

1 ответ

2

Вы должны сначала проверить, что dlopen на самом деле преуспевает (вероятно, это не так).

Для этого:

  • установить main.c останова в main.c после dlopen.
  • подтвердите, что возвращенный дескриптор не равен NULL

В этот момент GDB должен иметь загруженные символы для libtest.so, а libtest.so должен отображаться в info shared вывода GDB.

Если все выглядит хорошо, info break должен показывать активную test.cpp:35 останова в test.cpp:35 на каком-то адресе. Если эта точка останова никогда не попадает, вероятно, вы никогда не используете эту линию кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню