Tương đương với giàn troll -Tiêu và giàn trâu -U trên Linux?


12

Có tương đương với những gì -T-Utùy chọn của trusstiện ích Solaris làm trên Linux không.

Đó là để chỉ định một lệnh gọi hệ thống ( -T) hoặc hàm thư viện ( -U) mà khi được gọi bởi ứng dụng theo dõi sẽ khiến nó dừng lại.

Hoặc, nói cách khác, tôi muốn bất kỳ quá trình nào được bắt đầu bởi một ứng dụng theo dõi bị dừng lại (như thể bị SIGSTOP giết) ngay khi nó thực hiện một cuộc gọi hệ thống nhất định hoặc một cuộc gọi chức năng thư viện dùng chung.

straceltracetrên Linux cung cấp phần lớn các tính năng của Solaristruss , nhưng dường như họ không làm điều đó.

Ví dụ:

truss -f -T open cmd

Sẽ giống như strace -f cmdngoại trừ rằng nếu quá trình thực thi cmdhoặc bất kỳ hậu duệ của nó làm bất kỳopen cuộc gọi hệ thống , nó sẽ bị dừng ngay lập tức (và tôi có thể tiếp tục lại sau này một cách thuận tiện)

Trong một số trường hợp, tôi có thể sử dụng gdb's catch syscall, nhưng tôi đang tìm kiếm một giải pháp mà có thể thoải mái làm theo dĩa và tiếp tục làm việc đó cho tất cả các quá trình chia hai và tiếp tục làm việc đó ngay cả sau khi execves.

Tôi dường như nhớ lại một số tiện ích có cùng chức năng, thậm chí một (hoặc tùy chọn cho cùng tiện ích đó) cho các ứng dụng một bước giữa một số lần xuất hiện của một tòa nhà nào đó từ xa như thế, nhưng tôi không chắc chắn, tôi không thể chắc chắn đó là trên Linux.


1
Không thực sự là một câu trả lời cho câu hỏi của bạn, nhưng gdb có một số tùy chọn để theo dõi các nhánh, nó chỉ không khóa một lệnh thực thi. Mặc dù vậy, nó vẫn chỉ thực hiện một quy trình tại một thời điểm, có lẽ là một công cụ giải quyết nếu bạn đang tìm kiếm chức năng giống như bước đi, nhưng tôi nghĩ rằng tôi chỉ đề cập đến nó trong trường hợp.
Bratchley

@JoelDavis, cảm ơn. Và có vẻ như nó cũng có thể theo sau exec, ( follow-exec-mode), tôi đang thử nghiệm điều đó. Không trả lời đúng câu hỏi, nhưng có thể đủ tốt cho những gì tôi cần.
Stéphane Chazelas

Nếu tôi hiểu câu hỏi của bạn, bạn đang tìm cách theo dõi cho đến khi nhìn thấy tín hiệu cụ thể và sau đó dừng theo dõi, không dừng hoặc giết ứng dụng mà bạn truy tìm theo bất kỳ cách nào, phải không?
slm

@slm, không, tôi muốn một quá trình bắt đầu bởi một ứng dụng theo dõi bị dừng lại (như thể bị SIGSTOP giết) ngay khi nó thực hiện một cuộc gọi hệ thống nhất định. Tôi đã thêm một liên kết đến trang web Solaris truss.
Stéphane Chazelas

Hãy để tôi chắc chắn rằng tôi hiểu chính xác. Bạn muốn có một cách để ngăn chặn một quá trình khi nó tạo ra một hệ thống cụ thể. Đúng không?
sparticvs

Câu trả lời:


3

Theo hiểu biết tốt nhất của tôi, điều này không thể thực hiện được strace, ptracechức năng được sử dụng trong nội bộ thực hiện SIGSTOPhoặcSIGINT trong các cuộc gọi.

BIÊN TẬP:

Tôi đã chèn giải pháp đơn giản này trong ministrace , vì vậy không cần mã hóa.

Giải pháp đề xuất của tôi, nếu không phải tất cả các chức năng của strace, sẽ là sửa đổi ministrace - mà tôi tìm thấy ở đây Viết cho mình một bước trong 70 dòng mã .

Trong chương trình one shot, bạn có thể thêm hai dòng trước đoạn mã sau:

if (wait_for_syscall(child) != 0) break;

Mã giả:

if(syscall == SYS_write)
    do {
        char str[4];
        gets(str);  // waits until enter to continue    
    } while(0);

Tôi chưa từng nói về điều này, những bước cuối cùng còn lại cho bạn.


Cảm ơn. Nó hoạt động và liên kết đó là rất hữu ích. Tuy nhiên (có thể hiểu được trong một vài dòng mã), nó không thực hiện giải mã arg mà gdb / strace làm, vì vậy sẽ không hữu ích cho mục đích của tôi. Nó cho thấy rằng nó dễ dàng thực hiện. Cuối cùng tôi đã tìm kiếm gdb nhưng có vẻ như việc vá lỗi cho tính năng đó sẽ tương đối dễ dàng. Để lại câu hỏi mở vì tôi nghi ngờ có một lệnh hiện có để làm điều đó. Tôi sẽ nhìn vào python-ptrace khi tôi có thời gian.
Stéphane Chazelas

Không có gì! Tôi đã có một chút hoang dã trong việc mở rộng việc thực hiện, vì vậy có thể tham chiếu tòa nhà theo id và theo tên. Đó là niềm vui khi chơi với ptrace một lần nữa.
Daniël W. Crompton

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.