Как определить, запущен ли текущий процесс GDB?

Стандартный способ будет следующим:

if (ptrace(PTRACE_TRACEME, 0, NULL, 0) == -1)
  printf("traced!\n");

В этом случае ptrace возвращает ошибку, если текущий процесс отслеживается (то есть запускает его с помощью gdb или присоединяет к нему).

Но есть серьезная проблема с этим: если вызов возвращается успешно, GDB может не подключиться к нему позже. Что является проблемой, так как я не пытаюсь реализовать анти-отладочные вещи. Моя цель состоит в том, чтобы выдать 'int 3', когда выполнено условие (то есть, сбой подтверждения) и работает gdb (в противном случае я получаю SIGTRAP, который останавливает приложение).

Отключение SIGTRAP и выдача 'int 3' каждый раз не является хорошим решением, потому что тестируемое приложение может использовать SIGTRAP для какой-то другой цели (в этом случае я все еще не уверен, так что это не имеет значения, но это впринципе :))

Спасибо

Ответы на вопрос(7)

Ваш ответ на вопрос