Làm thế nào để sử dụng strace để hệ thống Linux Màn hình cuộc gọi

Jun 23, 2025
Linux
fatmawati achmad zaenuri / shutterstock.com [số 8]

Các chương trình Linux hỏi Kernel. [số 8] để làm một số điều cho họ. Các strace. Lệnh tiết lộ các cuộc gọi hệ thống này. Bạn có thể sử dụng chúng để hiểu cách chương trình hoạt động và tại sao, đôi khi, họ không.

Các cuộc gọi kernel và hệ thống

Thông minh như họ có thể, các chương trình máy tính không thể tự làm mọi thứ. Họ cần thực hiện các yêu cầu để có một số chức năng nhất định được thực hiện cho họ. Những yêu cầu này đi đến Kernel Linux. Thông thường, có một thư viện hoặc giao diện phần mềm khác mà chương trình gọi và thư viện sau đó thực hiện yêu cầu thích hợp được gọi là một cuộc gọi hệ thống-vào kernel.

Có thể thấy hệ thống gọi rằng một chương trình đã thực hiện và những phản ứng có thể giúp bạn hiểu được hoạt động bên trong các chương trình mà bạn quan tâm hoặc bạn đã viết. Đây là Cái gì strace. làm [số 8] . Nó có thể giúp khắc phục sự cố và tìm kiếm tắc nghẽn.

Điều này không giống như Gỡ lỗi một ứng dụng [số 8] với một công cụ như gdb. . Một chương trình gỡ lỗi cho phép bạn điều tra hoạt động nội bộ của một chương trình khi nó chạy. Nó cho phép bạn bước qua logic của chương trình của bạn và kiểm tra bộ nhớ và giá trị biến. Bằng cách so sánh, những gì strace. Liệu là nắm bắt thông tin cuộc gọi hệ thống khi chương trình đang chạy. Khi chương trình truy tìm chấm dứt, strace. Liệt kê thông tin cuộc gọi hệ thống đến cửa sổ Terminal.

Các cuộc gọi hệ thống cung cấp tất cả các loại chức năng cấp thấp, chẳng hạn như các hành động đọc và ghi trên các tệp, giết các quy trình, v.v. Có một danh sách hàng trăm cuộc gọi hệ thống trên Trang Man Syscalls [số 8] .

CÓ LIÊN QUAN: Gỡ lỗi với GDB: Bắt đầu [số 8]

Cài đặt strace.

Nếu như strace. chưa được cài đặt trên máy tính của bạn, bạn có thể cài đặt nó rất dễ dàng.

Trên Ubuntu, sử dụng lệnh này:

 sudo apt cài đặt strace 

Trên Fedora, nhập lệnh này:

 sudo dnf cài đặt strace 

Trên Manjaro, lệnh là:

 sudo pacman -sy strace 

Bước đầu tiên với Strace

Chúng tôi sẽ sử dụng một chương trình nhỏ để chứng minh strace. . Nó không làm gì nhiều: nó sẽ mở một tệp và ghi một dòng văn bản vào đó và nó không có bất kỳ lỗi nào kiểm tra trong đó. Đó chỉ là một hack nhanh chóng để chúng ta có một cái gì đó để sử dụng với strace. .

 #include & lt; stdio.h & gt;

int Main (int argc, char argv []) {

  // Tay cầm tệp
  Tập tin * filegeek;

  // Mở tệp có tên "strace_demo.txt" hoặc tạo nó
  filegeek = fopen ("strace_demo.txt", "W");

  // Viết một số văn bản vào tập tin
  fprintf (filegeek, "viết nó vào tập tin");

  // Đóng tệp
  fclose (filegeek);

  // Thoát khỏi chương trình
  trả lại (0);

} // kết thúc chính 

Chúng tôi đã lưu nó vào một tệp có tên là "file-io.c" và biên dịch nó với GCC. vào một thực thi được gọi là Stex. , Đặt tên cho " NS cuộc đua Ví dụ Phong phú."

 GCC -O STEX File-io.c 

Chúng tôi sẽ gọi strace. Từ dòng lệnh và chuyển tên mới của chúng ta thực thi sang đó là quy trình mà chúng ta muốn truy tìm theo dõi. Chúng tôi có thể dễ dàng theo dõi bất kỳ lệnh linux nào hoặc bất kỳ tệp thực thi nhị phân nào khác. Chúng tôi đang sử dụng chương trình nhỏ bé của chúng tôi vì hai lý do.

Lý do đầu tiên là strace. là dài dòng. Có thể có rất nhiều sản lượng. Thật tuyệt khi bạn đang sử dụng strace. Trong sự tức giận, lúc đầu nó có thể quá sức. Có giới hạn strace. đầu ra cho chương trình nhỏ của chúng tôi. Lý do thứ hai là chương trình của chúng tôi có chức năng hạn chế và mã nguồn ngắn và đơn giản. Điều này giúp dễ dàng xác định phần nào của đầu ra đề cập đến các phần khác nhau của hoạt động nội bộ của chương trình.

 Strace ./stex

Chúng ta có thể thấy rõ viết Gọi hệ thống Gửi văn bản "Viết nó vào tệp" vào tệp đã mở của chúng tôi và exit_group. Gọi hệ thống. Điều này chấm dứt tất cả các chủ đề trong ứng dụng và gửi một giá trị trả về trở lại shell.

Lọc đầu ra

Ngay cả với chương trình trình diễn đơn giản của chúng tôi, có khá nhiều đầu ra. Chúng ta có thể sử dụng -pe. (biểu thức) tùy chọn. Chúng tôi sẽ chuyển vào tên của cuộc gọi hệ thống mà chúng tôi muốn xem.

 Strace -e viết ./stex

Bạn có thể báo cáo về nhiều cuộc gọi hệ thống bằng cách thêm chúng dưới dạng danh sách được phân tách bằng dấu phẩy. Không bao gồm bất kỳ khoảng trắng nào trong danh sách các cuộc gọi hệ thống.

 Strace -e Đóng, viết ./stex

Gửi đầu ra đến một tập tin

Lợi ích của việc lọc đầu ra cũng là vấn đề với việc lọc đầu ra. Bạn thấy những gì bạn yêu cầu để xem, nhưng bạn không thấy gì khác. Và một số sản lượng khác có thể hữu ích hơn với bạn so với những thứ bạn yêu cầu xem.

Đôi khi, nó thuận tiện hơn để chụp mọi thứ và tìm kiếm và cuộn qua toàn bộ kết quả. Bằng cách đó, bạn sẽ không vô tình loại trừ bất cứ điều gì quan trọng. Các - (đầu ra) Tùy chọn cho phép bạn gửi đầu ra từ một strace. phiên vào một tập tin văn bản.

 Strace -o Trace-Output.txt ./stex

Sau đó, bạn có thể sử dụng ít hơn chỉ huy [số 8] Để cuộn qua danh sách và tìm kiếm các cuộc gọi hệ thống, hoặc bất cứ điều gì khác theo tên.

 Ít Trace-Expution.txt 

Bây giờ bạn có thể sử dụng tất cả ít hơn Khả năng tìm kiếm của Search để điều tra đầu ra.

CÓ LIÊN QUAN: Cách sử dụng Lệnh ít hơn trên Linux [số 8]

Thêm dấu thời gian

Bạn có thể thêm một số dấu thời gian khác nhau vào đầu ra. Các -NS Tùy chọn (Dấu thời gian tương đối) Tùy chọn thêm dấu thời gian cho thấy sự khác biệt về thời gian giữa sự bắt đầu của mỗi cuộc gọi hệ thống liên tiếp. Lưu ý rằng các giá trị thời gian này sẽ bao gồm thời gian dành cho cuộc gọi hệ thống trước đó và bất cứ điều gì khác mà chương trình đang hoạt động trước cuộc gọi hệ thống tiếp theo.

 Strace -r ./stex

Các dấu thời gian được hiển thị ở đầu của mỗi dòng đầu ra.

Để xem lượng thời gian dành cho mỗi cuộc gọi hệ thống, hãy sử dụng -NS (Syscall-Times) tùy chọn. Điều này cho thấy thời gian thời gian dành cho mỗi cuộc gọi hệ thống.

 Strace -t ./stex

Thời gian thời gian được hiển thị ở cuối mỗi dòng gọi hệ thống.

Để xem thời gian mà mỗi cuộc gọi hệ thống được gọi, sử dụng -tà (dấu thời gian tuyệt đối) tùy chọn. Điều này cho thấy "đồng hồ treo tường" thời gian, với độ phân giải micro giây.

 Strace -tt ./stex

Thời gian được hiển thị ở đầu mỗi dòng.

Truy tìm một quá trình đang chạy

Nếu quá trình mà bạn muốn theo dõi đã chạy, bạn vẫn có thể đính kèm strace. đến nó. Để làm như vậy, bạn cần biết ID tiến trình. Bạn có thể sử dụng trước [số 8] với grep. [số 8] Để tìm điều này. Chúng tôi có Firefox đang chạy. Để tìm ra id của Firefox. quá trình, chúng ta có thể sử dụng trước Ống nó thông qua grep. . [số 8]

 PS -E | grep firefox 

Chúng ta có thể thấy rằng ID tiến trình là 8483. Chúng tôi sẽ sử dụng -P (ID quy trình) tùy chọn để nói strace. quy trình nào để gắn vào. Lưu ý rằng bạn sẽ cần sử dụng sudo. :

 sudo strace -p 8483 

Bạn sẽ thấy một thông báo rằng strace. đã đính kèm chính mình vào quy trình, và sau đó các cuộc gọi theo dõi hệ thống sẽ được hiển thị trong cửa sổ Terminal như bình thường.

Tạo một báo cáo

Các -NS (chỉ tóm tắt) tùy chọn nguyên nhân strace. để in một báo cáo. Nó tạo ra một bảng để biết thông tin về các cuộc gọi hệ thống được thực hiện bởi chương trình theo dõi.

 Strace -c ./stex

Các cột là:

  • % thời gian : Tỷ lệ thời gian thực hiện đã được sử dụng trong mỗi cuộc gọi hệ thống.
  • giây : Tổng thời gian biểu thị bằng giây và micro giây dành cho mỗi cuộc gọi hệ thống.
  • USECS / Call. : Thời gian trung bình trong micro giây dành cho mỗi cuộc gọi hệ thống.
  • gọi : Số lần mà mỗi cuộc gọi hệ thống được thực thi.
  • Lỗi : Số lần thất bại cho mỗi cuộc gọi hệ thống.
  • SYSCALL. : Tên của cuộc gọi hệ thống.

Các giá trị này sẽ hiển thị các số 0 cho các chương trình tầm thường thực hiện và chấm dứt nhanh chóng. Các giá trị trong thế giới thực được hiển thị cho các chương trình làm một cái gì đó có ý nghĩa hơn ứng dụng trình diễn của chúng tôi.

Những hiểu biết sâu sắc, dễ dàng

Các strace. Đầu ra có thể cho bạn thấy những cuộc gọi hệ thống đang được thực hiện, những cuộc gọi nào đang được thực hiện nhiều lần và thời gian thực hiện được sử dụng trong mã bên kernel. Đó là thông tin tuyệt vời. Thông thường, khi bạn đang cố gắng hiểu những gì đang diễn ra trong mã của mình, thật dễ dàng để quên rằng nhị phân của bạn đang tương tác gần như không ngừng hoạt động với kernel để thực hiện nhiều chức năng của nó.

Bằng cách sử dụng strace. , bạn thấy bức tranh hoàn chỉnh.


Linux - Các bài báo phổ biến nhất

Làm thế nào để xử lý một dòng tập tin theo Line trong một Linux Bash Script

Linux Feb 3, 2025

Fatmawati Achmad Zaenuri / Shutterstock [số 8] Thật dễ dàng để đọc nội dung của dòng tệp văn bản Linux theo dòng trong một t�..


Làm thế nào để sử dụng “Đây Documents” trong Bash trên Linux

Linux Mar 31, 2025

Fatmawati Achmad Zaenuri / Shutterstock [số 8] Các tài liệu "ở đây được đặt tên một cách kỳ lạ" cho phép bạn sử dụng chuy�..


là gì Bash Từ điển trên Linux, và làm thế nào để sử dụng chúng?

Linux Jun 16, 2025

fatmawati achmad zaenuri / shutterstock.com [số 8] Từ điển Bash cung cấp cho bạn bản đồ băm và các mảng kết hợp trong các tậ..


KDE Connect là Cuối cùng Đến với iPhone

Linux Oct 26, 2025

Kde. [số 8] Nếu bạn đang tìm kiếm một cách dễ dàng để làm cho iPhone của bạn chơi đẹp với Máy tính để bàn KDE. , hôm..


Ubuntu 21.10 đến với một Customized GNOME 40 Desktop

Linux Oct 14, 2025

Ubuntu. [số 8] Nếu bạn là người dùng Ubuntu, hoặc ai đó đang nghĩ về việc thử nó, hôm nay là một ngày tốt lành. Canonical đã chính th..


Có gì mới trong Ubuntu 21.10 'Nắm hình Indri'

Linux Oct 14, 2025

Canonical. [số 8] Ubuntu 21.10 "" INDRI " là thoát ra vào ngày 14 tháng 10 năm 2021. Nó có tính năng Gnome 40. , m..


Cách cài đặt Linux trên M1 Mac với Apple Silicon

Linux Nov 11, 2024

Hỗ trợ Linux bản địa cho kiến ​​trúc dựa trên cánh tay mới của Apple vẫn chưa sẵn sàng, nhưng bạn có thể chạy Linux trên một M1. , M1 Pr..


Cách liệt kê các dịch vụ Linux với SystemCTL

Linux Oct 18, 2025

Máy tính Linux của bạn dựa vào rất nhiều tác vụ nền gọi là Dịch vụ hoặc Daemons. Trên các bản phân phối dựa trên SystemD, bạn có các lệnh tích hợp ..


Thể loại