Как использовать библиотеки отладки на ubuntu

моя текущая проблема связана с libwebkitgtk-3.0-0, но я думаю, что эта проблема достаточно общая.

мое приложение сбой где-то в коде webkit. Я предполагаю, что мы делаем что-то глупое и хотим выяснить, что именно. Проще всего будет установить точку останова или использовать отладочную версию библиотеки.

  1. Как сделать точную исходный код, с помощью которого была построена библиотека? Я получаю трассировку стека после того, как он сбрасывает ядро, но номер строки gdb говоря, не совпадают с теми, что я вижу в коде. Другими словами, если я установлю libwebkitgtk-3.0-0 я хочу получить точный код.

  2. Я установил отладочную версию библиотеки webkit. Имеют ли эти отладочные версии такую же функциональность, как если бы вы компилировали webkit с флагом --enable-debug? Отладочные версии webkit включают ведение журнала на основе переменной среды WEBKIT_DEBUG, но я не мог получить тот же журнал, даже если использовать отладочную версию библиотека.

  3. Как использовать отладочную версию, которую мне удалось скомпилировать? Мне удалось скомпилировать webkit на моей машине и попытался возиться с путями загрузки и тому подобное. Мое приложение не выбирает новую общую библиотеку независимо от того, что я делаю - я могу сказать на основе подписи агента пользователя. В какой-то момент мне удалось забрать библиотеку, но затем SSL перестает работать. Та же проблема SSL происходит с GtkLauncher. Значит, я где-то ошибаюсь.

Спасибо за указатели.

3 ответов


1) Когда мне нужно копаться в библиотеке, которую я установил через пакет, первое, что я делаю, это установить ее из источника. Я имею в виду configur/make/make install. Обычно я помещаю исходный код в /usr/local /src и устанавливаю его в/usr / local . Это, на мой взгляд, самый надежный способ запуска точного кода, для которого у вас есть источник.

3)

Как использовать отладочную версию, которую мне удалось скомпилировать?

Это похоже на тебя сделал то, что я описал выше. Что вам нужно сделать, так это убедиться,что ваше программное обеспечение использует каталоги include и link, в которых размещена ваша скомпилированная библиотека с включенной отладкой. Это означает, что-I/usr/local /include и-l/usr/local /lib флаги установлены, и они приходят перед/usr /include и/usr / lib.

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

2) обычно да. Но это будет зависеть от того, как написана библиотека и что решил сделать упаковщик ubuntu.

Как только вы скомпилируете программу, используя локально построенную библиотеку, посмотрите, получаете ли вы то же самое сначала ошибка. Если нет, то это тоже точка данных. Возможно, проблема была исправлена с момента последней упаковки ubuntu библиотеки. Возможно, библиотека не упакована должным образом, и в этом проблема. Вы даже можете получить новые ошибки, потому что ubuntu packager настроил библиотеку определенным образом, чтобы она работала, и вы не делали то же самое. Вы все равно получите интересные зацепки.

удачи


TL; DR: установить libwebkitgtk-3.0-0-dbg установить libwebkitgtk-3.0-0-dbg http://hostmar.co/software-small, тогда у вас есть необходимые символы отладки.

для отладочных символов обычно не требуется устанавливать из исходного кода.

как вы знаете, чтобы получить символы отладки для программного обеспечения, которое вы создаете сами, вы можете запустить GCC с -g.

для программного обеспечения, установленного через Диспетчер пакетов вашей операционной системы (который включает libwebkitgtk-3.0-0 здесь), по крайней мере для официальных пакетов, там обычно тоже пакеты с отладочными символами.

на самом деле вам не нужно иметь отладочную сборку программы или библиотеки, чтобы получить символическую трассировку стека в gdb. gdb также поддерживает файлы, предоставляющие символы отладки "add-on" в /usr/lib/debug.

вы используете Ubuntu, в соответствии с тегами на вашем вопросе. в Ubuntu пакеты символов отладки доступны в двух вариантах: -dbg и -dbgsym. Программа или библиотека, расположенная по адресу /path получает символы отладки в /usr/lib/debug/path.

-dbg пакетов

эти пакеты часто называются иначе, чем соответствующие пакеты, предоставляющие фактические исполняемые файлы или файлы библиотеки. Они часто называются аналогично -dev пакеты (которые предоставляют заголовочные файлы) и -doc пакеты. А -dbg пакет иногда имеет меньшую нумерацию версий библиотеки в имени, чем фактические пакеты библиотеки, иногда покрытие двоичных файлов, предоставляемых в нескольких других пакетах.

например, libgtkmm-3.0-1с тегом и libgtkmm-3.0-dbg.

С другой стороны, иногда -dbg пакет называется так же, как пакет, символы которого он предоставляет (за исключением -dbg суффикс). Например, libwebkitgtk-3.0-0с тегом и libwebkitgtk-3.0-0-dbg. вы хотеть.

вы можете установить его в Центре приложений или с помощью команды:

sudo apt-get update && sudo apt-get install libwebkitgtk-3.0-0-dbg

теперь, когда вы отлаживаете программу, которая ссылки на библиотеки libwebkitgtk-3.0-0, gdb автоматически загружает символы из файла, предоставленного libwebkitgtk-3.0-0-dbg.

-dbgsym пакетов

иногда двоичные исполняемые файлы, предоставляемые официальным пакетом, не имеют символов, предусмотренных в любом . Когда это происходит, обычно вы можете установить -dbgsym пакет.

в отличие от -dbg пакеты, -dbgsym упаковка:

  • почти всегда просто (и предсказуемо) имени X-dbgsym здесь X - это пакет, предоставляющий саму программу или библиотеку.
  • предоставляются специальными программными источниками (репозиториями),не те же источники программного обеспечения, которые предоставляют соответствующие пакеты программ / библиотек и -dbg пакеты.

С -dbgsym пакеты находятся в отдельных репозиториях, вы должны включить эти репозитории. Их строки DEB:

deb http://ddebs.ubuntu.com YOUR_RELEASE main restricted universe multiverse
deb http://ddebs.ubuntu.com YOUR_RELEASE-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com YOUR_RELEASE-security main restricted universe multiverse
deb http://ddebs.ubuntu.com YOUR_RELEASE-proposed main restricted universe multiverse

чтобы включить их, вы можете запустить эти команды (адаптированные из DebuggingProgramCrash by "участники документации Ubuntu wiki", 2):

echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-security main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse
" | sudo tee -a /etc/apt/sources.list.d/ddebs.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01
sudo apt-get update

оставить курсивом строки, Если вы находитесь на стадии разработки (Альфа или бета). Однако обязательно добавьте их, если вы продолжите использовать выпуск после стабилизации.

эти команды делают три вещи:

  1. создать файл /etc/apt/sources.list.d/ddebs.list (который содержит строки DEB).
  2. импортируйте ключ подписи для этих репозиториев.
  3. обновление информации в системе о том, какие пакеты и версии доступны для установки, откуда.

так если вы когда-нибудь хотите использовать -dbgsymпредоставленные символы вместо -dbg предоставил символов -dbgsym - пакет для libwebkitgtk-3.0-0 is (в соответствии с простым соглашением об именах выше) libwebkitgtk-3.0-0-dbgsym.

вы можете иметь как -dbg и -dbgsym пакеты, установленные в одной системе,но не если они предоставляют символы для любого из тех же файлов. Так что libwebkitgtk-3.0-0-dbg и libwebkitgtk-3.0-0-dbgsym конфликтуют друг с другом; они не могут быть установлены одновременно.

использование Символы

на большинстве Unix-подобных ОС, отладчик будет автоматически искать установленные символы. Ubuntu ничем не отличается-в Ubuntu,gdb автоматически ищет их в /usr/lib/debug. Так что тебе не нужно делать ничего особенного.

однако, если вам когда-либо нужно было сказать gdb чтобы загрузить определенный файл символов отладки, вы должны использовать -s file флаг. См.руководство GNU и gdb (1) для сведения.


@Илии рассказывает, как получить символы в удобном виде.

вопрос остается, " как получить точный исходный код?".

Я обычно делаю apt-get source <pkgname> что хорошо и хорошо, за исключением того, что я должен вручную сказать gdb dir <path-to-wherever-I-put-the-source> и горе betide, если это пакет, как eglibc где нужно выяснить, что ссылки на путь из nss подкаталог, а не корень.

на RHEL просто делает, например yum install --enable-repo rhel-debuginfo libX11-debuginfo (просто yum install libX11-debuginfo на CentOS 7) и мгновенно вы получаете полные символы и источник в gdb без дополнительной возни. Я все еще ищу это удобство в Ubuntu.