Включите исходный код malloc.c в gdb?
как я могу включить/просмотреть исходный код malloc
в gdb?
Я хочу сделать пошаговое выполнение в gdb
, и malloc.c
исходный код при вызове любой из функций malloc.
в настоящее время то, что говорит gdb:
malloc.c: No such file or directory.
этой парень столкнулся с той же проблемой, но они не упоминают решение, т. е. как в исходный код функции malloc.
я Ubuntu server 14.04
, и у меня есть уже пытался установить следующее:
libc6-dbg
, libc6-dev
и libc6-dbgsym
.
Я даже не знаю, Может ли один из этих пакетов помочь, но установка libc-dbgsym
дает мне следующую ошибку:
dpkg: error processing archive /var/cache/apt/archives/libc6-dbgsym_2.19-0ubuntu6.6_amd64.ddeb (--unpack): trying to overwrite
'/usr/lib/debug/usr/lib/x86_64-linux-gnu/audit/sotruss-lib.so', which
is also in package libc6-dbg:amd64 2.19-0ubuntu6.6 dpkg-deb: error:
subprocess paste was killed by signal (Broken pipe)
2 ответов
следующее сработало для меня. Не уверен, что есть лучший путь.
- установите libc6-dbg (что вы уже сделали):
sudo apt-get install libc6-dbg
- установите пакет eglibc-source (ubuntu фактически использует eglibc):
sudo apt-get install eglibc-source
. - распакуйте файл tar, который был установлен в /usr/src / glibc:
/usr/src/glibc $ sudo tar xvf eglibc-2.19.tar.xz
- провернуть gdb и добавить в путь к источнику malloc:
(gdb) dir /usr/src/glibc/eglibc-2.19/malloc
(gdb) n
13 char *c = malloc (100);
(gdb) s
_ _ GI _ _ _ libc_malloc (байты=100) в malloc.c: 2876 2876
{
(gdb)
Gdb может отображать только исходные коды, поскольку двоичные файлы, скомпилированные отладкой, содержат ссылки между двоичным кодом и исходными файлами.
malloc()
в C-библиотеку. В обычных системах он не компилируется с метаданными отладки, и его источники также не установлены в системе.
но они достижимы, нужно только установить отладочные версии этих библиотек. Например, в debian an apt-get install glibc-debug
или подобное сделает это. На SuSE, a zipper in libc6-debug
(afaik, возможно, точные имена пакетов могут немного отличаться).