2016-10-23 17 views
1

Я использую Ubuntu 14,04Почему gdb не загружает libdl поверх sharedlibrady? и heaptrack не работает

я попробовать использовать https://github.com/KDE/heaptrack для обнаружения утечек памяти в программе моей запущенной C++

когда сценарий heaptrack оболочка работает

gdb --batch-silent -n -iex="set auto-solib-add off" -p $pid \ 
    --eval-command="sharedlibrary libdl" \ 
    --eval-command="call (void) dlmopen(0x00, \"$LIBHEAPTRACK_INJECT\", 0x002)" \ 
    --eval-command="sharedlibrary libheaptrack_inject" \ 
    --eval-command="call (void) heaptrack_inject(\"$pipe\")" \ 
    --eval-command="detach" 

я вижу следующее сообщение об ошибке

No symbol "dlmopen" in current context. 
No symbol "heaptrack_inject" in current context. 

и когда я запускаю gdb вручную

gdb -p XXX 
(gdb) sharedlibrary libdl 

я вижу другие сообщения об ошибке

No loaded shared libraries match the pattern `libdl'. 

но libdl.so существует в моей файловой системе

# find/-name libdl*.so 
/usr/lib/debug/lib/x86_64-linux-gnu/libdl-2.19.so 
/usr/lib/x86_64-linux-gnu/libdl.so 
/lib/x86_64-linux-gnu/libdl-2.19.so 

Почему GDB не загружайте libdl над sharedlibrary командой?

ответ

2

Почему gdb не загружает libdl поверх команды sharedlibrary?

Это сообщение:

No loaded shared libraries match the pattern `libdl'. 

означает, что хуже (отлаживается) процесс не связывает с libdl. Вы можете найти все библиотеки, которые у вашего нижнего есть с (gdb) info shared, и подтвердите, что libdl не входит в их число.

GDB сам по себе не модифицирует набор загружаемых библиотек.

find/-name libdl*.so

Это значения. libdl.so существует, но это не означает, что каждый процесс загружает его (ваш процесс не).