2015-11-19 15 views
30

जबकि OSX 10.11.1 पर iosnoop आदेश चलाकर मैं निम्न पाठ के साथ कोई त्रुटि मिलती है:iosnoop, iotop, opensnoop, execsnoop, opensnoop, dtruss और अन्य dtrace आधारित आदेशों OSX एल कैप्टन पर काम नहीं करते, MacOS सिएरा

dtrace: invalid probe specifier 
/* 
    * Command line arguments 
    */ 
inline int OPT_dump = 0; 
inline int OPT_device = 0; 
inline int OPT_delta = 0; 
inline int OPT_devname = 0; 
inline int OPT_file = 0; 
inline int OPT_args = 0; 
inline int OPT_ins  = 0; 
inline int OPT_nums = 0; 
inline int OPT_dtime = 0; 
inline int OPT_mount = 0; 
inline int OPT_start = 0; 
inline int OPT_pid  = 0; 
inline int OPT_name = 0; 
inline int OPT_end  = 0; 
inline int OPT_endstr = 0; 
inline int FILTER = 0; 
inline int PID  = 0; 
inline string DEVICE = "."; 
inline string FILENAME = "."; 
inline string MOUNT = "."; 
inline string NAME  = "."; 

#pragma D option quiet 
#pragma D option switchrate=10hz 

/* 
    * Print header 
    */ 
dtrace:::BEGIN 
{ 
    last_event[""] = 0; 

    /* print optional headers */ 
    OPT_start ? printf("%-14s ","STIME") : 1; 
    OPT_end  ? printf("%-14s ","TIME") : 1; 
    OPT_endstr ? printf("%-20s ","STRTIME") : 1; 
    OPT_devname ? printf("%-7s ","DEVICE") : 1; 
    OPT_ins  ? printf("%-3s ","INS")  : 1; 
    OPT_nums ? printf("%-3s %-3s ","MAJ","MIN") : 1; 
    OPT_delta ? printf("%-10s ","DELTA") : 1; 
    OPT_dtime ? printf("%-10s ","DTIME") : 1; 

    /* print main headers */ 
    OPT_dump ? 
     printf("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", 
     "TIME", "STIME", "DELTA", "DEVICE", "INS", "MAJ", "MIN", "UID", 
     "PID", "PPID", "D", "BLOCK", "SIZE", "MOUNT", "FILE", "PATH", 
     "COMM","ARGS") : 
     printf("%5s %5s %1s %8s %6s ", "UID", "PID", "D", "BLOCK", "SIZE"); 
    OPT_args == 0 ? printf("%10s %s\n", "COMM", "PATHNAME") : 1; 
    OPT_args == 1 ? printf("%28s %s\n", "PATHNAME", "ARGS") : 1; 
} 

/* 
    * Check event is being traced 
    */ 
io:::start 
{ 
    /* default is to trace unless filtering, */ 
    self->ok = FILTER ? 0 : 1; 

    /* check each filter, */ 
    (OPT_device == 1 && DEVICE == args[1]->dev_statname)? self->ok = 1 : 1; 
    (OPT_file == 1 && FILENAME == args[2]->fi_pathname) ? self->ok = 1 : 1; 
    (OPT_mount == 1 && MOUNT == args[2]->fi_mount) ? self->ok = 1 : 1; 
    (OPT_name == 1 && NAME == strstr(NAME, execname)) ? self->ok = 1 : 1; 
    (OPT_name == 1 && execname == strstr(execname, NAME)) ? self->ok = 1 : 1; 
    (OPT_pid == 1 && PID == pid) ? self->ok = 1 : 1; 
} 

/* 
    * Reset last_event for disk idle -> start 
    * this prevents idle time being counted as disk time. 
    */ 
io:::start 
/! pending[args[1]->dev_statname]/ 
{ 
    /* save last disk event */ 
    last_event[args[1]->dev_statname] = timestamp; 
} 

/* 
    * Store entry details 
    */ 
io:::start 
/self->ok/ 
{ 
    /* these are used as a unique disk event key, */ 
    this->dev = args[0]->b_edev; 
    this->blk = args[0]->b_blkno; 

    /* save disk event details, */ 
    start_uid[this->dev, this->blk] = (int)uid; 
    start_pid[this->dev, this->blk] = pid; 
    start_ppid[this->dev, this->blk] = ppid; 
    start_args[this->dev, this->blk] = (char *)curpsinfo->pr_psargs; 
    start_comm[this->dev, this->blk] = execname; 
    start_time[this->dev, this->blk] = timestamp; 

    /* increase disk event pending count */ 
    pending[args[1]->dev_statname]++; 

    self->ok = 0; 
} 

/* 
    * Process and Print completion 
    */ 
io:::done 
/start_time[args[0]->b_edev, args[0]->b_blkno]/ 
{ 
    /* decrease disk event pending count */ 
    pending[args[1]->dev_statname]--; 

    /* 
    * Process details 
    */ 

    /* fetch entry values */ 
    this->dev = args[0]->b_edev; 
    this->blk = args[0]->b_blkno; 
    this->suid = start_uid[this->dev, this->blk]; 
    this->spid = start_pid[this->dev, this->blk]; 
    this->sppid = start_ppid[this->dev, this->blk]; 
    self->sargs = (int)start_args[this->dev, this->blk] == 0 ? 
     "" : start_args[this->dev, this->blk]; 
    self->scomm = start_comm[this->dev, this->blk]; 
    this->stime = start_time[this->dev, this->blk]; 
    this->etime = timestamp; /* endtime */ 
    this->delta = this->etime - this->stime; 
    this->dtime = last_event[args[1]->dev_statname] == 0 ? 0 : 
     timestamp - last_event[args[1]->dev_statname]; 

    /* memory cleanup */ 
    start_uid[this->dev, this->blk] = 0; 
    start_pid[this->dev, this->blk] = 0; 
    start_ppid[this->dev, this->blk] = 0; 
    start_args[this->dev, this->blk] = 0; 
    start_time[this->dev, this->blk] = 0; 
    start_comm[this->dev, this->blk] = 0; 
    start_rw[this->dev, this->blk] = 0; 

    /* 
    * Print details 
    */ 

    /* print optional fields */ 
    OPT_start ? printf("%-14d ", this->stime/1000) : 1; 
    OPT_end  ? printf("%-14d ", this->etime/1000) : 1; 
    OPT_endstr ? printf("%-20Y ", walltimestamp) : 1; 
    OPT_devname ? printf("%-7s ", args[1]->dev_statname) : 1; 
    OPT_ins  ? printf("%3d ", args[1]->dev_instance) : 1; 
    OPT_nums ? printf("%3d %3d ", 
     args[1]->dev_major, args[1]->dev_minor) : 1; 
    OPT_delta ? printf("%-10d ", this->delta/1000) : 1; 
    OPT_dtime ? printf("%-10d ", this->dtime/1000) : 1; 

    /* print main fields */ 
    OPT_dump ? 
     printf("%d %d %d %s %d %d %d %d %d %d %s %d %d %s %s %s %s %S\n", 
     this->etime/1000, this->stime/1000, this->delta/1000, 
     args[1]->dev_statname, args[1]->dev_instance, args[1]->dev_major, 
     args[1]->dev_minor, this->suid, this->spid, this->sppid, 
     args[0]->b_flags & B_READ ? "R" : "W", 
     args[0]->b_blkno, args[0]->b_bcount, args[2]->fi_mount, 
     args[2]->fi_name, args[2]->fi_pathname, self->scomm, self->sargs) : 
     printf("%5d %5d %1s %8d %6d ", 
     this->suid, this->spid, args[0]->b_flags & B_READ ? "R" : "W", 
     args[0]->b_blkno, args[0]->b_bcount); 
    OPT_args == 0 ? printf("%10s %s\n", self->scomm, args[2]->fi_pathname) 
     : 1; 
    OPT_args == 1 ? printf("%28s %S\n", 
     args[2]->fi_pathname, self->sargs) : 1; 

    /* save last disk event */ 
    last_event[args[1]->dev_statname] = timestamp; 

    /* cleanup */ 
    self->scomm = 0; 
    self->sargs = 0; 
} 

/* 
    * Prevent pending from underflowing 
    * this can happen if this program is started during disk events. 
    */ 
io:::done 
/pending[args[1]->dev_statname] < 0/ 
{ 
    pending[args[1]->dev_statname] = 0; 
} 
: probe description io:::start does not match any probes 

ओएसएक्स के समान संस्करण को चलाने वाली दो मशीनों पर परीक्षण किया गया और एक ही त्रुटि मिली। 10.10 पर भी परीक्षण किया गया और यह काम करता था जैसा कि इसे करना चाहिए।

उत्तर

15

here से समाधान मिला।

चूंकि यह पता चला है कि ओएसएक्स elcapitan में रूट उपयोगकर्ता कंप्यूटर तक पूर्ण पहुंच नहीं है। इस व्यवहार को बदलने के लिए आपको कंप्यूटर को पुनरारंभ करने और पुनर्प्राप्ति मोड में प्रवेश करने के लिए कमांड + R दबाएं। शीर्ष मेनू-> उपयोगिता-> टर्मिनल से टर्मिनल खोलें और 'csrutil अक्षम' कमांड निष्पादित करें। फिर अपने कंप्यूटर को पुनरारंभ करें। अब आप iosnoop, iotop और इसी तरह के dtrace संबंधित आदेशों का उपयोग करने में सक्षम होना चाहिए।

+1

बस ध्यान में रखना है कि क्या आप यहाँ क्या कर रहे हैं अक्षम करने है सिस्टम इंटेग्रिटी प्रोटेक्शन, मैलवेयर को प्रतिबंधित करने के लिए डिज़ाइन की गई एक सुरक्षा सुविधा। Dtrace का उपयोग नहीं करते समय, रिकवरी मोड से 'csrutil enable' के साथ इसे चालू करना एक अच्छा विचार होगा। – rgov

33

iosnoop dtrace उपप्रणाली पर निर्भर करता है। से: http://jimtechstuff.blogspot.com/2015/10/dtrace-broken-under-el-capitan.html


Dtrace एल कैप्टन

उपकरण है कि मैं डिबगिंग में काफी एक बहुत का उपयोग करें 'dtrace' और विभिन्न उपयोगिताओं कि इसका इस्तेमाल में से एक है के तहत टूट गया है। जैसे खुले स्नूप, आईपोटो और कुछ जिन्हें मैंने खुद लिखा था।

एल कैपिटन के जीए के साथ, किसी भी सिस्टम निर्देशिका में रहने वाली किसी भी उपयोगिता को किसी समस्या का पता नहीं लगाया जा सकता है। मैं यह देखना चाहता था कि कौन सी ओपन सिस्टम कॉल ऐप का उपयोग कर रहा था और इस पर आया।

मुझे पता है कि मैं कुछ अन्य मैक उपयोगिताओं (fs_usage, sc_usage इत्यादि) का उपयोग कर सकता था लेकिन मैं यहां अपनी सोलारिस जड़ों को दिखा रहा हूं और मैं अभी भी dtrace का उपयोग करना चाहता था।

Reboot the mac 
Hold ⌘R during reboot 
From the Utilities menu, run Terminal 
Enter the following command 
csrutil enable --without dtrace 

ध्यान दें, कि जब ऐसा करने से मैं निम्न चेतावनी मिल गया:

यह एक असमर्थित विन्यास है, भविष्य में टूटने की संभावना

सौभाग्य से वहाँ सक्रिय करने के dtrace का एक तरीका होना करने के लिए लग रहा है और अपनी मशीन को अज्ञात स्थिति में छोड़ दें।

मैं अभी इसके साथ रहूंगा।


(मैं सिर्फ आरा Yeressian के ज्यादातर सही जवाब के लिए एक टिप्पणी जोड़ना चाहते थे, लेकिन stackoverflow मुझे मेरे वर्तमान कम प्रतिष्ठा के साथ नहीं दूँगी)

संबंधित मुद्दे