Стандартным способом будет следующее:
if (ptrace(PTRACE_TRACEME, 0, NULL, 0) == -1)
printf("traced!\n");
В этом случае ptrace возвращает ошибку, если текущий процесс отслеживается (т.е. запускает его с помощью gdb или присоединяется к нему).
Но есть серьезные проблемы с этим: если вызов возвращается успешно, gdb может не присоединяться к нему позже. Это проблема, поскольку я не пытаюсь внедрять анти-отладочные материалы. Моя цель состоит в том, чтобы испускать "int 3", когда встречается конфликт (т.е. Утверждение терпит неудачу) и работает gdb (в противном случае я получаю SIGTRAP, который останавливает приложение).
Отключение SIGTRAP и испускание "int 3" каждый раз не является хорошим решением, потому что приложение, которое я тестирую, может использовать SIGTRAP для какой-то другой цели (в этом случае я все еще вкручен, так что это не имеет значения но это принцип вещи:))
Спасибо