GDB: ошибка при удаленной загрузке общих библиотек

Я использую X-сервер на Linux tutnix 3.13.0-30-generic #54-Ubuntu i686 i686 GNU/Linux.

На X-сервере я использую schroot, чтобы изменить корень, и после этого я запускаю на нем свое приложение.

Теперь проблема в том, что я пытаюсь запустить gdbserver (версия 6.7.1) на X-сервере (скажем, на удаленной машине) и gdb (версия 7.7) на машине с Ubuntu (локальная машина или машина, на которой работает X-сервер), но это не работает.

Это то, что я пробовал до сих пор: -

  1. выполненные ниже команды на удаленной машине

    • MY_Application &
    • gdbserver localhost: 8888 --attach process_id
  2. выполненные ниже команды на локальной машине

    • gdb ./MY_Application
    • (gdb) удаленная цель: 8888

Теперь на локальной машине gdb показывает это сообщение

Could not load shared library symbols for 20 libraries, e.g. /usr/lib/libqt.so.3. Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"?

Насколько я понимаю, gdb не умеет загружать разделяемые библиотеки, а их 20 штук. В результате этого я не могу найти символы, присутствующие в этих общих библиотеках.

Я попытался загрузить символы из библиотечных файлов на локальную машину с помощью команды symbol-file на gdb, но это приводит к несоответствию адресов.

Поэтому я использовал следующую команду

  • (gdb) установить удаленный sysroot:/

но он снова показывает сообщение об ошибке

Could not open 'remote:/usr/local/davis/lib/usr/lib/libqt.so.3' as an executable file: Function not implemented

Может ли кто-нибудь сказать мне, что я делаю неправильно здесь? Если есть альтернативное решение для загрузки символов из общих библиотек, пожалуйста, предложите.

P.S. Оба двоичных файла MY_Application одинаковы.


person The Philomath    schedule 09.08.2016    source источник


Ответы (1)


Наконец-то я нашел решение своей проблемы. Проблема была на шаге 2, показанном выше. Почему-то gdb не загружал все символы и PATH в разделяемые библиотеки. Хотя PATH, показанный командой ldd, был точным. Но все же это не сработало для меня, если я просто запустил gdb ./MY_Application Поэтому я выполнил еще одну команду после этого, т.е.

file MY_Application

а также скопировал файл библиотеки из /srv/chroot/loc/usr/local/davis/lib/ в /usr/local/davis/lib/, после этого я подключаю его к удаленному серверу, и теперь он работает нормально.

person The Philomath    schedule 12.08.2016