Как отлаживать функции в динамической библиотеке, загруженной LD_PRELOAD с помощью gdb? - PullRequest
3 голосов
/ 10 февраля 2012

Я пытаюсь отладить некоторые функции в динамической разделяемой библиотеке libexecHook.so.Эта библиотека предварительно загружена установкой LD_PRELOAD, чтобы перехватывать и переписывать некоторые вызовы execve () и друзей.Для отладки я построил gmake с символами.Из того, что я прочитал в других вопросах, это должно работать:

gdb ~/tmp/make-dfsg-3.81/make
set exec-wrapper env LD_PRELOAD=/home/marko/execHook.C027/lib/libexecHook.so.0.0.0
start
break execve
break execvp
cont

Я вижу, что точки останова установлены правильно, например,

4       breakpoint     keep y   0x00007ffff7bd92e0 in execvp at execHook.c:128

, но GDB никогда не прерывается в моем предварительно загруженном exec .. () функции.Наблюдая за выходом отладки во время выполнения, я вижу, что функции моей библиотеки вызываются.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

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

set follow-fork-mode child

, чтобы привязать GDB к дочернему элементу, который создается в vfork().

0 голосов
/ 10 февраля 2012

Попробуйте сказать start перед установкой точек останова. Это запустит программу, что приведет к удовлетворению зависимостей библиотеки, надеюсь, используя ваш путь LD_PRELOAD. Затем установите точки останова после запуска и продолжайте.

...