Включите исходный код 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 ответов


следующее сработало для меня. Не уверен, что есть лучший путь.

  1. установите libc6-dbg (что вы уже сделали): sudo apt-get install libc6-dbg
  2. установите пакет eglibc-source (ubuntu фактически использует eglibc):sudo apt-get install eglibc-source.
  3. распакуйте файл tar, который был установлен в /usr/src / glibc: /usr/src/glibc $ sudo tar xvf eglibc-2.19.tar.xz
  4. провернуть 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, возможно, точные имена пакетов могут немного отличаться).