OS X thiếu số strace
của linux, nhưng có dtrace
được cho là tốt hơn nhiều.Làm cách nào để có được lệnh dtrace để chạy lệnh theo dõi với các thuộc tính không phải root?
Tuy nhiên, tôi nhớ khả năng thực hiện truy tìm đơn giản trên các lệnh riêng lẻ. Ví dụ, trên linux Tôi có thể viết strace -f gcc hello.c
để caputre tất cả các cuộc gọi hệ thống, mà mang lại cho tôi danh sách các tất cả các tên tập tin cần thiết bởi trình biên dịch để biên dịch chương trình của tôi (các memoize kịch bản tuyệt vời được xây dựng dựa trên thủ thuật này)
tôi muốn cổng ghi nhớ trên mac, vì vậy tôi cần một số loại strace
. Những gì tôi thực sự cần là danh sách các tập tin gcc
đọc và viết vào, vì vậy những gì tôi cần là nhiều hơn một truss
. Chắc chắn tôi có thể nói dtruss -f gcc hello.c
và nhận được phần nào chức năng tương tự, nhưng sau đó trình biên dịch được chạy với quyền sở hữu gốc, rõ ràng là không mong muốn (ngoài rủi ro bảo mật lớn, một vấn đề là tệp a.out
hiện thuộc sở hữu của root :-)
sau đó tôi đã cố gắng dtruss -f sudo -u myusername gcc hello.c
, nhưng điều này cảm thấy một chút sai lầm, và không hoạt động nào (tôi không nhận được a.out
tập tin ở mọi thời đại này, không chắc chắn lý do tại sao)
Tất cả những gì câu chuyện dài cố gắng để thúc đẩy câu hỏi ban đầu của tôi : làm cách nào để nhận được dtrace
để chạy lệnh của tôi với các đặc quyền người dùng thông thường, giống như strace
có trong linux?
Edit: được dường như tôi không phải là người duy nhất tự hỏi làm thế nào để làm điều này: Câu hỏi #1204256 là khá nhiều giống như tôi (và có câu trả lời sudo tối ưu cùng :-)
Có lẽ bạn đang đúng. mặc dù có được đặc quyền root không phải là vấn đề ở đây, vì trên máy tính xách tay của tôi tôi có thể (và đã làm như vậy) 'chmod a + s dtrace', dtrace không được dùng như một công cụ" unix power user ", mà là" unix quản trị "công cụ. Đó là lý do tại sao cố gắng sử dụng nó từ các chương trình người dùng dẫn đến một tình huống như vậy. Cảm ơn rất nhiều cho câu trả lời của bạn. – Gyom
Không thể có "chế độ hạn chế", chỉ một số đầu dò (như đầu dò syscall hoặc đầu dò vùng người dùng) sẽ kích hoạt và chỉ trong một số quy trình (những người thuộc sở hữu của người dùng có liên quan) và chỉ có một số chức năng : những người có thể dễ dàng được thực hiện để chỉ kiểm tra quy trình của riêng người dùng hoặc chỉ cung cấp quyền truy cập vào thông tin đã có sẵn cho người dùng theo các cách khác? – SamB