2012-06-23 27 views
5

Tôi có MacBook Pro giữa năm 2009 và MacBook Pro 2012 mới và tôi đang trong quá trình học DTrace (một công cụ khá tuyệt vời). Khi tôi tính toán tổng hợp trên MBP 2012 mới, tập hợp không in ra.Đầu dò DTrace END không bao giờ cháy

sudo dtrace -n 'syscall:::entry { @[execname] = count() }' 

On tôi giữa năm 2009 MBP, nó cho thấy một cái gì đó như:

usbmuxd               1 
    GrowlHelperApp             2 
    imklaunchagent             2 
    installd               2 
    stackshot               2 
    ... 

2012 MBP không hiển thị bất cứ điều gì.

Tôi đã thêm một printf trong một sinh mệnh và END thăm dò để xem nếu thăm dò END thậm chí sẽ sa thải như vậy:

BEGIN 
{ 
    printf("Hi!"); 
} 

syscall:::entry 
{ 
    @[execname] = count(); 
} 

END 
{ 
    printf("Bye!") 
} 

Trên giữa năm 2009 MBP cả đầu dò bị sa thải và được in và trên 2012 MBP chỉ đầu dò BEGIN bị sa thải. END không bao giờ bị sa thải.

Cả hai MBP đang chạy Lion 10.7.3. Tôi không chắc phải làm gì tiếp theo. Điểm khác biệt duy nhất hiện tại là tôi chưa cài đặt các công cụ dòng lệnh của nhà phát triển trên MBP 2012. Điều đó không có ý nghĩa với tôi và là một phát bắn trong bóng tối.

Bất kỳ trợ giúp hoặc ý tưởng nào sẽ được đánh giá cao. Cảm ơn.

============= [Bật gốc tài khoản] ====================

Vì vậy, tôi kích hoạt tài khoản gốc và tái chạy lệnh

sudo dtrace -n 'syscall:::entry { @[execname] = count() }' 

không thành công nhưng nếu tôi làm

su 
dtrace -n 'syscall:::entry { @[execname] = count() }' 

nó hoạt động!

============= [kill -s INT] =========================== ==

Tôi đã thử nghiệm thêm một chút. Nếu tôi chạy:

sudo kill -s INT [pid of dtrace] 

mọi thứ hoạt động và đầu ra được hiển thị.

Nếu tôi chạy:

sudo kill -s INT [pid of sudo running dtrace] 

cũng làm việc này!

Nhưng nếu tôi sử dụng điều khiển-c trong thiết bị đầu cuối, nó không hiển thị đầu ra.

Sự khác nhau giữa control-c và kill -s INT là gì?

+1

Hãy thử [bật "root"] (http://support.apple.com/kb/ht1528) trên hệ thống của bạn. – Kentzo

Trả lời

5

Tôi cũng nhận thấy rằng trên linux.

Ctrl-C không hoạt động nếu dtrace được sinh ra bởi sudo.

Nếu bạn sudo -i lấy vỏ gốc và sau đó gọi dtrace nó hoạt động.

+0

Tôi vẫn không chắc chắn những gì thay đổi giữa hai máy Mac nhưng điều này không làm việc và dễ dàng hơn là cố gắng để giết quá trình. Tôi cũng đã thử sudo -s và nó hoạt động.Cảm ơn – SargeATM

+0

có lẽ là phiên bản của sudo. Tôi tò mò phiên bản của sudo trong macosx cũ của bạn là gì? – ithkuil

+0

Điều này đã giúp tôi trên OSX 10.8. Cảm ơn! –