Подсчет системных вызовов программы и проверка достоверности результатов с помощью strace

Я использую ptrace для подсчета системных вызовов программы.
Проблема в том, что для программы A моя программа выводит количество сделанных системных вызовов (открыть, закрыть, прочитать, записать).

Результаты моей программы и strace (с опцией -c) с программой A в качестве аргумента были идентичными, за исключением открытых системных вызовов.
Моя программа напечатала 15, а strace напечатала 3.

Но я предполагаю, что, поскольку strace печатает и некоторые другие системные вызовы, в сумме они могут составлять 15 открытых системных вызовов, которые подсчитала моя программа.

Я использую SYS_open для проверки результатов ptrace при просмотре регистра ORIG_EAX/RAX.

Системные вызовы, которые печатает strace, находятся здесь.

Обновление:
Я скомпилировал свою программу из терминала и запустил ее оттуда, и с помощью strace результаты были такими же.
Я разрабатываю в netbeans.

Почему это случилось?


person Chris    schedule 07.04.2013    source источник
comment
@ user315052: В чем разница? Я просто использую SYS_open. (Я добавил обновление полчаса назад, пожалуйста, посмотрите)   -  person Chris    schedule 08.04.2013
comment
Как вы подсчитали, что у вас было 15 открытий? Как вы думаете, сколько у вас было закрытий?   -  person Jonathan Leffler    schedule 08.04.2013
comment
@JonathanLeffler: С помощью счетчика каждый раз, когда возврат из ptrace был SYS_open, я увеличивал его. Кроме того, я избегал двухкратного подсчета системных вызовов (поскольку ожидание возвращается дважды (2 прерывания)). У меня было 3 закрытия (так же, как и strace).   -  person Chris    schedule 08.04.2013


Ответы (1)


Похоже, что netbeans использует ptrace для управления вещами. (В конце концов, как он может делать точки останова и шаги без него?) Таким образом, netbeans может отправлять безвредные сигналы вашей программе.

Вы можете запустить strace -o /tmp/foo (без -c), чтобы точно узнать, что происходит. (сравните вывод в netbeans и без netbeans, чтобы увидеть, что отличается.)

Вы также можете добавить «-e open,close», если хотите отфильтровать определенные вызовы.

person BraveNewCurrency    schedule 15.04.2013
comment
Хм, может быть это. Когда запускать команду strace, которую вы опубликовали? Один с программой, которую я разрабатываю, а другой с netbeans? (это звучит неправильно :P) - person Chris; 19.04.2013