Зондирование пользовательского пространства с помощью systemtap

Что ж, я пытаюсь проверить свое собственное приложение на маркерах SDT. Я написал сценарий systemtap для его проверки, но systemtap не показывает ошибок до 5-го прохода, а затем после 5-го прохода (начало запуска) он просто ничего не делает. Вот моя программа на C с маркером SDT:

foo.c :

#include <sys/sdt.h>
#include <stdio.h>

    int main(void)
    {
      printf("Before Marker\n");
      DTRACE_PROBE(user_app, foo_start);
      printf("After Marker\n");
      return 0;
    }

И мой сценарий systemtap:

probe_foo.stp

probe process("./user_app").mark("foo_start")
 {
  exit();
 }

И команда, которую я запускаю:

stap -v probe_foo.stp

Вот что я получаю:

Pass 1: parsed user script and 98 library script(s) using 217528virt/36580res/2976shr/34316data kb, in 190usr/30sys/222real ms.

Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) using 218596virt/38164res/3424shr/35372data kb, in 10usr/0sys/13real ms.

Pass 3: using cached /root/.systemtap/cache/a6/stap_a6e78dea575657695c4456347007229d_990.c

Pass 4: using cached /root/.systemtap/cache/a6/stap_a6e78dea575657695c4456347007229d_990.ko

Pass 5: starting run.

После этого он ждет бесконечно. Моя версия ядра 3.8.0, и я использую Fedora 18.


person Hemant Kumar    schedule 19.06.2013    source источник


Ответы (1)


Это выглядит нормально. Нет никаких указаний на то, что вы когда-либо запускали двоичный файл ./user_app, поэтому проверка systemtap никогда не срабатывала, поэтому у него никогда не было причин для выхода().

Попробуйте вместо этого

stap -t probe_foo.stp -c ./user_app

где '-c ./user_app' запустит данное приложение (и ограничит проверку им, а не всей системой), а '-t' выдаст общее количество попаданий/время проверки при завершении работы скрипта. (Поскольку у вас есть только один зонд, который выполняет функцию exit(), этот отчет будет тривиальным.)

person fche    schedule 19.06.2013
comment
Большое спасибо, да, поэтому мне нужно сначала запустить программу, а затем использовать stap -t probe_foo.stp... - person Hemant Kumar; 19.06.2013