Здесь вы можете ввести временную переменную, за которой следует бесконечный цикл:
void my_shared_loopy()
{
int loopy = 1;
while (loopy) ;
}
Вызовите это my_shared_loopy()
где-нибудь в функции, которую вы пытаетесь отлаживать ... перекомпилируйте свою разделяемую библиотеку, а затем, когда отладчик подключится к функции, которую вы отлаживаете, он зависнет в этом коде ... просто установите значение от loopy
до 0, а затем продолжить отладку.
РЕДАКТИРОВАТЬ: как дополнительный помощник, я обычно ставлю
fprintf(stderr, "attach GDB to %d\n", getpid());
перед циклом. Кроме того, если вы не хотите случайно записывать много циклов, переведите цикл в режим сна следующим образом:
void my_shared_loopy()
{
int loopy = 1;
fprintf(stderr, "attach GDB to %d\n", getpid());
while (loopy) sleep(1);
}
Когда вы подключите GDB, вы, скорее всего, будете находиться во сне. Сделайте это, чтобы выйти:
(gdb) finish
(gdb) set var loopy = 0
(gdb) break <wherever you want to debug>
(gdb) continue