2015-11-18 3 views
2

Я пытаюсь отлаживать libc на Ubuntu 14.04, но не смог это сделать, используя gdb, так как библиотека и источник не соответствуют правильно.Не удалось отладить исходный код libc на Ubuntu 14.04

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

Когда я приступаю заявление заявления с использованием next на gdb, маркер будет продолжать прыгать вверх и вниз (Причина в том, что исходный файл и отлаживать библиотеки не правильно соответствия.

Моя версия glibc согласно ldd является

ldd --version 
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19 
Copyright (C) 2014 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
Written by Roland McGrath and Ulrich Drepper. 

Я скачал libc источников с помощью команды:

sudo apt-get source libc6

выше создаст следующие файлы:

eglibc-2.19 
eglibc_2.19-0ubuntu6.6.debian.tar.xz 
eglibc_2.19-0ubuntu6.6.dsc 
eglibc_2.19.orig.tar.xz 

В gdb я делаю

dir <path-to-libc-source>/nptl (NPTL, потому что я заходя в pthread_create)

Я попытался использовать как eglibc-2.19 источник, а также eglibc_2.19.orig.tar.xz.

Я также попытался установить LD_LIBRARY_PATH: export LD_LIBRARY_PATH=/usr/lib/debug

Но выше, также не помогает.

Может ли кто-нибудь, кто успешно смог отладить код libc, поделился своими методами относительно того, как это сделать правильно?

ответ

0

Предполагая версию исходного кода и версию библиотеки одинаков ....

Первопричины из «прыгают» из-за оптимизации компилятора часто изменяет порядок исполняемого кода от порядка в исходный файл.

Это происходит, когда код скомпилирован с любым из параметров оптимизации.

+0

Но не будет 'gdb' использовать библиотеку отладки. Я также попытался установить LD_LIBRARY_PATH для отладки пути lib, даже если это не помогает –

+0

«gdb» использует то, что вы ему рассказываете. Обычно вы указываете путь/имя исполняемого файла. исходные файлы должны быть видны в «gdb» для отображения соответствующего кода при выполнении кода. Примечание: библиотека (особенно для системных библиотек) будет удалена вся информация об отладке (возможно, с помощью чего-то похожего на команду «strip»). Между удалением информации об оптимизации и отладочной информации очень мало шансов легко отладить системную библиотеку , – user3629249

+0

Согласен. Но в библиотеках в '/ usr/lib/debug' есть своя информация об отладке –

Смежные вопросы