Подсчет системных вызовов программы и проверка правильности результатов с помощью strace
Я использую ptrace для подсчета системных вызовов программы.
Проблема в том, что для данной программы A моя программа распечатывает количество выполненных системных вызовов (открытие, закрытие, чтение, запись).
Результаты моей программы и strace (с параметром -c) с программой A в качестве аргумента были идентичны, за исключением открытых системных вызовов.
В моей программе напечатано 15 и проставлено 3 отпечатка.
Но я предполагаю, что поскольку strace печатает и некоторые другие системные вызовы, они могут составить до 15 открытых системных вызовов, которые подсчитала моя программа.
Я использую SYS_open для проверки результатов ptrace при просмотре регистра ORIG_EAX/RAX.
Системные вызовы, которые связывают отпечатки, здесь.
Обновить:
Я скомпилировал свою программу из терминала и запустил ее оттуда, и результаты были одинаковыми с strace.
Я развиваюсь в NetBeans.
Почему это случилось?
1 ответ
Похоже, NetBeans использует Ptrace для управления вещами. (В конце концов, как он может делать точки останова и шаги без него?) Таким образом, netbeans может посылать безопасные сигналы в вашу программу.
Вы можете запустить strace -o /tmp/foo (без -c), чтобы точно узнать, что происходит. (сравните выходные данные под netbeans и без netbeans, чтобы увидеть, что отличается.)
Вы также можете добавить "-e открыть, закрыть", если вы хотите фильтровать по определенным вызовам.