Đây là lệnh strace64 có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
đi lạc - các cuộc gọi và tín hiệu của hệ thống theo dõi
SYNOPSIS
đi lạc [-CdffhikqrtttTvVxxy] [-In] [-bthi hành] [-ethể hiện] ... [-acột]
[-ohồ sơ] [-skích thước] [-Pcon đường] ... -ppid... / [-D] [-Elà[=val]] ...
[-utên truy nhập] lệnh [args.]
đi lạc -c[df] [-In] [-bthi hành] [-ethể hiện] ... [-Otrên không] [-Ssắp xếp]
-ppid... / [-D] [-Elà[=val]] ... [-utên truy nhập] lệnh [args.]
MÔ TẢ
Trong trường hợp đơn giản nhất đi lạc chạy theo chỉ định lệnh cho đến khi nó thoát ra.
Nó chặn và ghi lại các lệnh gọi hệ thống được gọi bởi
quy trình và các tín hiệu được nhận bởi một quy trình. Tên của
mỗi lệnh gọi hệ thống, các đối số của nó và giá trị trả về của nó được in trên
lỗi tiêu chuẩn hoặc đối với tệp được chỉ định với -o tùy chọn.
đi lạc là một công cụ chẩn đoán, hướng dẫn và gỡ lỗi hữu ích.
Quản trị viên hệ thống, chuyên gia chẩn đoán và người xử lý sự cố sẽ tìm thấy nó
vô giá để giải quyết các vấn đề với các chương trình mà nguồn là
không có sẵn vì chúng không cần phải được biên dịch lại theo thứ tự
để theo dõi chúng. Sinh viên, tin tặc và những người quá tò mò sẽ thấy rằng
rất nhiều thứ có thể được học về một hệ thống và hệ thống của nó gọi bằng cách
truy tìm ngay cả các chương trình thông thường. Và các lập trình viên sẽ tìm thấy điều đó vì
các cuộc gọi và tín hiệu hệ thống là các sự kiện xảy ra ở người dùng / hạt nhân
giao diện, việc kiểm tra chặt chẽ ranh giới này rất hữu ích cho lỗi
cô lập, kiểm tra sự tỉnh táo và cố gắng nắm bắt các điều kiện của cuộc đua.
Mỗi dòng trong dấu vết chứa tên gọi hệ thống, theo sau là
đối số trong ngoặc đơn và giá trị trả về của nó. Một ví dụ từ
câu lệnh "cat / dev / null" là:
open ("/ dev / null", O_RDONLY) = 3
Lỗi (thường là giá trị trả về -1) có biểu tượng errno và lỗi
chuỗi được nối thêm.
open ("/ foo / bar", O_RDONLY) = -1 ENOENT (Không có tệp hoặc thư mục như vậy)
Tín hiệu được in ra dưới dạng ký hiệu tín hiệu và cấu trúc siginfo được giải mã. Một
đoạn trích từ stracing và ngắt lệnh "sleep 666" là:
đăng ký ([]
--- SIGINT {si_signo = SIGINT, si_code = SI_USER, si_pid = ...} ---
+++ bị giết bởi SIGINT +++
Nếu một lệnh gọi hệ thống đang được thực hiện và trong khi một lệnh gọi khác đang được
được gọi từ một luồng / quy trình khác sau đó đi lạc sẽ cố gắng giữ gìn
thứ tự của các sự kiện đó và đánh dấu cuộc gọi đang diễn ra là
chưa hoàn thành. Khi cuộc gọi trở lại, nó sẽ được đánh dấu là tiếp tục.
[pid 28772] select (4, [3], NULL, NULL, NULL
[pid 28779] clock_gettime (CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... select resumed>) = 1 (trong [3])
Sự gián đoạn của cuộc gọi hệ thống (có thể khởi động lại) bởi một tín hiệu phân phối là
được xử lý theo cách khác khi hạt nhân kết thúc lệnh gọi hệ thống và cũng
sắp xếp việc thực thi lại ngay lập tức của nó sau khi trình xử lý tín hiệu hoàn thành.
đọc (0, 0x7ffff72cf5cf, 1) =? ERESTARTSYS (Được khởi động lại)
--- SIGALRM ... ---
rt_sigreturn(0xe) = 0
đọc (0, "", 1) = 0
Các lập luận được in dưới dạng tượng trưng với một niềm đam mê. Ví dụ này
hiển thị trình bao thực hiện chuyển hướng đầu ra ">> xyzzy":
open ("xyzzy", O_WRONLY | O_APPEND | O_CREAT, 0666) = 3
Ở đây, đối số thứ ba của mở được giải mã bằng cách chia nhỏ cờ
đối số vào ba thành phần bitwise OR của nó và in chế độ
giá trị trong bát phân theo truyền thống. Trường hợp cách sử dụng truyền thống hoặc bản địa khác nhau
từ ANSI hoặc POSIX, các hình thức sau được ưu tiên hơn. Trong vài trường hợp,
đi lạc đầu ra đã được chứng minh là dễ đọc hơn nguồn.
Con trỏ cấu trúc được tham chiếu đến và các thành viên được hiển thị dưới dạng
phù hợp. Trong mọi trường hợp, các đối số được định dạng giống C nhất
thời trang nhất có thể. Ví dụ, bản chất của lệnh "ls -l
/ dev / null "được ghi lại là:
lstat ("/ dev / null", {st_mode = S_IFCHR | 0666, st_rdev = makedev (1, 3), ...}) = 0
Lưu ý cách tham chiếu đối số 'struct stat' và cách mỗi đối số
thành viên được hiển thị một cách tượng trưng. Đặc biệt, hãy quan sát cách
thành viên st_mode được giải mã cẩn thận thành bitwise HOẶC của biểu tượng và
giá trị số. Cũng lưu ý trong ví dụ này rằng đối số đầu tiên
lstat là đầu vào cho lệnh gọi hệ thống và đối số thứ hai là
đầu ra. Vì các đối số đầu ra không được sửa đổi nếu hệ thống gọi
không thành công, các đối số có thể không phải lúc nào cũng được tham chiếu. Ví dụ: thử lại
ví dụ "ls -l" với một tệp không tồn tại sẽ tạo ra như sau
hàng:
lstat ("/ foo / bar", 0xb004) = -1 ENOENT (Không có tệp hoặc thư mục như vậy)
Trong trường hợp này, đèn ở hiên nhà vẫn sáng nhưng không có ai ở nhà.
Con trỏ ký tự được tham chiếu đến và được in dưới dạng chuỗi C. Không
ký tự in trong chuỗi thường được biểu diễn bằng C thông thường
mã thoát. Chỉ người đầu tiên kích thước (32 theo mặc định) byte chuỗi
được in ra; chuỗi dài hơn có một dấu chấm lửng được nối sau
kết thúc báo giá. Đây là một dòng từ "ls -l" trong đó getpwuid thư viện
đang đọc tệp mật khẩu:
read (3, "root :: 0: 0: System Administrator: /" ..., 1024) = 422
Trong khi các cấu trúc được chú thích bằng cách sử dụng dấu ngoặc nhọn, con trỏ đơn giản và
mảng được in bằng dấu ngoặc vuông có dấu phẩy ngăn cách
các yếu tố. Đây là một ví dụ từ lệnh "id" trên hệ thống với
id nhóm bổ sung:
getgroups (32, [100, 0]) = 2
Mặt khác, tập hợp bit cũng được hiển thị bằng cách sử dụng dấu ngoặc vuông nhưng
các phần tử tập hợp chỉ được phân tách bằng dấu cách. Đây là vỏ
chuẩn bị thực hiện một lệnh bên ngoài:
sigprocmask (SIG_BLOCK, [CHLD TTOU], []) = 0
Ở đây đối số thứ hai là một tập hợp bit của hai tín hiệu, SIGCHLD và
SIGTTOU. Trong một số trường hợp, tập hợp bit đã đầy đến mức in ra
phần tử chưa đặt có giá trị hơn. Trong trường hợp đó, tập hợp bit được đặt trước
bởi một dấu ngã như thế này:
sigprocmask (SIG_UNBLOCK, ~ [], NULL) = 0
Ở đây, đối số thứ hai đại diện cho tập hợp đầy đủ của tất cả các tín hiệu.
LỰA CHỌN
-c Đếm thời gian, cuộc gọi và lỗi cho mỗi cuộc gọi hệ thống
và báo cáo tóm tắt khi thoát chương trình. Trên Linux,
điều này cố gắng hiển thị thời gian hệ thống (thời gian CPU đã sử dụng
chạy trong nhân) độc lập với đồng hồ treo tường
thời gian. Nếu như -c được sử dụng với -f or -F (bên dưới), chỉ
tổng cộng cho tất cả các quy trình được truy tìm được lưu giữ.
-C Như -c mà còn in đầu ra thông thường trong khi
các quy trình đang chạy.
-D Chạy quy trình theo dõi với tư cách là một đứa cháu riêng biệt, không phải với tư cách
cha của dấu vết. Điều này làm giảm khả năng hiển thị
ảnh hưởng của đi lạc bằng cách giữ cho dấu vết trực tiếp
con của quá trình gọi.
-d Hiển thị một số đầu ra gỡ lỗi của đi lạc chính nó trên
lỗi tiêu chuẩn.
-f Theo dõi các quy trình con khi chúng được tạo bởi
các quy trình hiện được theo dõi do kết quả của
ngã ba(2) cái nĩa(2) nhân bản(2) các cuộc gọi hệ thống. Ghi chú
việc này -p PID -f sẽ đính kèm tất cả các chuỗi quy trình
PID nếu nó là đa luồng, không chỉ luồng với
thread_id = PID.
-ff Nếu -o tên tập tin tùy chọn đang có hiệu lực, mỗi
quá trình theo dõi được ghi vào tên tệp.pid pid ở đâu
là id quy trình số của mỗi quy trình. Đây là
không tương thích với -c, vì không có số lượng mỗi quy trình
được giữ.
-F Tùy chọn này hiện đã lỗi thời và nó có cùng
chức năng như -f.
-h In tóm tắt trợ giúp.
-i In con trỏ hướng dẫn tại thời điểm
cuộc gọi hệ thống.
-k In dấu vết ngăn xếp thực thi của dấu vết đã được theo dõi
các quy trình sau mỗi lần gọi hệ thống (thử nghiệm).
Tùy chọn này chỉ khả dụng nếu đi lạc được xây dựng
với libunwind.
-q Loại bỏ các thông báo về việc đính kèm, tách rời, v.v.
Điều này xảy ra tự động khi đầu ra được chuyển hướng
vào một tệp và lệnh được chạy trực tiếp thay vì
đính kèm.
-qq Nếu được đưa ra hai lần, hãy chặn thông báo về việc thoát quy trình
trạng thái.
-r In dấu thời gian tương đối khi truy cập vào từng hệ thống
gọi. Điều này ghi lại sự khác biệt về thời gian giữa
bắt đầu của các cuộc gọi hệ thống liên tiếp.
-t Bắt đầu mỗi dòng của dấu vết với thời gian trong ngày.
-tt Nếu đưa ra hai lần, thời gian được in sẽ bao gồm
micro giây.
-ttt Nếu cho trước ba lần, thời gian được in sẽ bao gồm
micro giây và phần đầu sẽ được in
là số giây kể từ kỷ nguyên.
-T Hiển thị thời gian dành cho các cuộc gọi hệ thống. Hồ sơ này
sự khác biệt thời gian giữa lúc bắt đầu và
cuối mỗi lệnh gọi hệ thống.
-w Tóm tắt thời gian chênh lệch giữa đầu
và kết thúc mỗi lệnh gọi hệ thống. Mặc định là
tóm tắt thời gian của hệ thống.
-v In các phiên bản không viết tắt của môi trường, thống kê,
cuộc gọi termios, v.v. Những cấu trúc này rất
phổ biến trong các cuộc gọi và do đó, hành vi mặc định sẽ hiển thị
một tập hợp con hợp lý của các thành viên cấu trúc. Dùng cái này
tùy chọn để có được tất cả các chi tiết đẫm máu.
-V In số phiên bản của đi lạc.
-x In tất cả các chuỗi không phải ASCII ở dạng chuỗi thập lục phân
định dạng.
-xx In tất cả các chuỗi ở định dạng chuỗi thập lục phân.
-y In đường dẫn được liên kết với bộ mô tả tệp
lập luận.
-yy In ip: cặp cổng được liên kết với tệp socket
bộ mô tả.
-a cột Căn chỉnh các giá trị trả về trong một cột cụ thể (mặc định
cột 40).
-b tòa nhà cao tầng Nếu đạt được cuộc gọi tổng hợp được chỉ định, hãy tách khỏi cuộc gọi đã theo dõi
tiến trình. Hiện tại, chỉ thi hành syscall là
được hỗ trợ. Tùy chọn này hữu ích nếu bạn muốn
theo dõi quá trình đa luồng và do đó yêu cầu
-f, nhưng không muốn theo dõi nó (có khả năng rất
phức tạp) trẻ em.
-e thể hiện Một biểu thức đủ điều kiện sửa đổi những sự kiện nào
để theo dõi hoặc làm thế nào để theo dõi chúng. Định dạng của
biểu thức là:
[đủ điều kiện=][!]giá trị1[,giá trị2] ...
Ở đâu đủ điều kiện là một trong những theo dõi, viết tắt, dài dòng,
nguyên, tín hiệu, đọc, hoặc là viết và giá trị là một
ký hiệu hoặc số phụ thuộc định tính. Mặc định
vòng loại là theo dõi. Sử dụng dấu chấm than
phủ định tập giá trị. Ví dụ, -e mở
có nghĩa đen -e theo dõi=mở đến lượt nó có nghĩa là
chỉ theo dõi mở cuộc gọi hệ thống. Ngược lại,
-e theo dõi=!mở có nghĩa là theo dõi mọi cuộc gọi hệ thống
ngoại trừ mở. Ngoài ra, các giá trị đặc biệt tất cả các
và không ai có những ý nghĩa rõ ràng.
Lưu ý rằng một số shell sử dụng dấu chấm than cho
mở rộng lịch sử ngay cả bên trong các đối số được trích dẫn. Nếu như
vì vậy, bạn phải thoát khỏi dấu chấm than với
dấu gạch chéo ngược.
-e theo dõi=định
Chỉ theo dõi tập hợp các lệnh gọi hệ thống được chỉ định. Các
-c tùy chọn hữu ích để xác định hệ thống nào
cuộc gọi có thể hữu ích để theo dõi. Ví dụ,
theo dõi=mở, đóng, đọc, viết có nghĩa là chỉ theo dõi
bốn lệnh gọi hệ thống đó. Hãy cẩn thận khi làm
suy luận về ranh giới người dùng / hạt nhân nếu chỉ
tập hợp con các cuộc gọi hệ thống đang được theo dõi. Các
mặc định là theo dõi=tất cả các.
-e theo dõi=hồ sơ
Theo dõi tất cả các lệnh gọi hệ thống có tên tệp là
tranh luận. Bạn có thể coi đây là một từ viết tắt
cho -e theo dõi=mở,stat,chmod,bỏ liên kết, ... đó là
hữu ích để xem quá trình này là những tệp nào
sự tham khảo. Hơn nữa, sử dụng chữ viết tắt
sẽ đảm bảo rằng bạn không vô tình quên
bao gồm một cuộc gọi như thống kê trong danh sách. Betchya
woulda quên cái đó.
-e theo dõi=quá trình
Theo dõi tất cả các lệnh gọi hệ thống liên quan đến quá trình
ban quản lý. Điều này rất hữu ích để theo dõi ngã ba,
chờ đợi và thực hiện các bước của quy trình.
-e theo dõi=mạng
Theo dõi tất cả các cuộc gọi hệ thống liên quan đến mạng.
-e theo dõi=tín hiệu
Theo dõi tất cả các cuộc gọi hệ thống liên quan đến tín hiệu.
-e theo dõi=cpi
Theo dõi tất cả các cuộc gọi hệ thống liên quan đến IPC.
-e theo dõi=giảm dần
Theo dõi tất cả các lệnh gọi hệ thống liên quan đến bộ mô tả tệp.
-e theo dõi=trí nhớ
Theo dõi tất cả các lệnh gọi hệ thống liên quan đến ánh xạ bộ nhớ.
-e viết tắt=định
Viết tắt đầu ra từ việc in từng thành viên của
cấu trúc lớn. Mặc định là viết tắt=tất cả các. Các
-v tùy chọn có tác dụng viết tắt=không ai.
-e dài dòng=định
Cấu trúc bỏ phiếu cho tập hợp cụ thể của
các cuộc gọi hệ thống. Mặc định là dài dòng=tất cả các.
-e nguyên=định In các đối số thô, chưa được giải mã cho tập hợp đã chỉ định
của các cuộc gọi hệ thống. Tùy chọn này có tác dụng
khiến tất cả các đối số được in dưới dạng thập lục phân.
Điều này hầu hết hữu ích nếu bạn không tin tưởng vào
giải mã hoặc bạn cần biết số thực tế
giá trị của một đối số.
-e tín hiệu=định
Chỉ theo dõi tập hợp con tín hiệu được chỉ định. Các
mặc định là tín hiệu=tất cả các. Ví dụ, tín hiệu =! SIGIO
(Hoặc tín hiệu=!io) khiến tín hiệu SIGIO không được
đã truy tìm.
-e đọc=định Thực hiện kết xuất đầy đủ hệ thập lục phân và ASCII của tất cả
dữ liệu đọc từ các bộ mô tả tệp được liệt kê trong
bộ xác định. Ví dụ: để xem tất cả đầu vào
hoạt động trên bộ mô tả tệp 3 và 5 sử dụng
-e đọc=3,5. Lưu ý rằng điều này độc lập với
truy tìm bình thường của đọc(2) lệnh gọi hệ thống là
được kiểm soát bởi tùy chọn -e theo dõi=đọc.
-e viết=định
Thực hiện kết xuất đầy đủ hệ thập lục phân và ASCII của tất cả
dữ liệu được ghi vào bộ mô tả tệp được liệt kê trong
bộ xác định. Ví dụ: để xem tất cả đầu ra
hoạt động trên bộ mô tả tệp 3 và 5 sử dụng
-e viết=3,5. Lưu ý rằng điều này độc lập với
dấu vết bình thường của viết(2) hệ thống gọi cái nào
được kiểm soát bởi tùy chọn -e theo dõi=viết.
-I gián đoạn
Khi đi lạc có thể bị gián đoạn bởi các tín hiệu (chẳng hạn như
nhấn ^ C). 1: không có tín hiệu bị chặn; 2: gây tử vong
tín hiệu bị chặn trong khi giải mã syscall
(vỡ nợ); 3: các tín hiệu nguy hiểm luôn bị chặn
(mặc định nếu '-o FILE PROG'); 4: các tín hiệu nguy hiểm và
SIGTSTP (^ Z) luôn bị chặn (hữu ích để tạo
strace -o FILE PROG không dừng lại trên ^ Z).
-o tên tập tin Ghi đầu ra theo dõi vào tệp tên tập tin hơn
so với stderr. Sử dụng tên tệp.pid if -ff Được sử dụng.
Nếu đối số bắt đầu bằng '|' Hoặc với '!' sau đó
phần còn lại của đối số được coi như một lệnh và tất cả
đầu ra được chuyển đến nó. Điều này thuận tiện cho
chuyển đầu ra gỡ lỗi đến một chương trình không có
ảnh hưởng đến chuyển hướng của các chương trình đã thực thi.
-O trên không Đặt chi phí cho các cuộc gọi hệ thống theo dõi thành
trên không micro giây. Điều này hữu ích cho
ghi đè heuristic mặc định để đoán cách
dành nhiều thời gian chỉ để đo lường khi tính thời gian
các cuộc gọi hệ thống bằng cách sử dụng -c Lựa chọn. Độ chính xác của
heuristic có thể được đánh giá bằng cách xác định thời gian
chương trình chạy mà không cần theo dõi (sử dụng thời gian(1)) và
so sánh thời gian gọi hệ thống tích lũy với
tổng số được sản xuất bằng cách sử dụng -c.
-p pid Đính kèm vào quy trình với ID quy trình pid và
bắt đầu truy tìm. Dấu vết có thể bị chấm dứt bất kỳ lúc nào
thời gian bằng tín hiệu ngắt bàn phím (CTRL-C).
đi lạc sẽ trả lời bằng cách tách chính nó khỏi
(các) quy trình đã theo dõi để (chúng) tiếp tục
đang chạy. Nhiều -p các tùy chọn có thể được sử dụng để đính kèm
cho nhiều quy trình. Cú pháp -p "` pidof PROG` "là
được hỗ trợ.
-P con đường Chỉ theo dõi các cuộc gọi hệ thống đang truy cập con đường. nhiều -P
các tùy chọn có thể được sử dụng để chỉ định một số đường dẫn.
-s kích thước Chỉ định kích thước chuỗi tối đa để in (
mặc định là 32). Lưu ý rằng tên tệp không phải là
được coi là chuỗi và luôn được in đầy đủ.
-S sắp xếp Sắp xếp đầu ra của biểu đồ được in theo -c
tùy chọn theo tiêu chí đã chỉ định. Giá trị pháp lý là
thời gian, cuộc gọi, tênvà không (mặc định là thời gian).
-u tên truy nhập Chạy lệnh với ID người dùng, ID nhóm và
nhóm bổ sung của tên truy nhập. Tùy chọn này là
chỉ hữu ích khi chạy dưới quyền root và cho phép
thực thi đúng các mã nhị phân setuid và / hoặc setgid.
Trừ khi tùy chọn này được sử dụng setuid và setgid
chương trình được thực thi mà không có đặc quyền hiệu quả.
-E là=val Chạy lệnh với là=val trong danh sách môi trường của nó
biến.
-E là Hủy bỏ là từ danh sách kế thừa của môi trường
trước khi chuyển nó vào lệnh.
CHẨN ĐOÁN
Thời Gian lệnh lối ra, đi lạc thoát với cùng một trạng thái thoát. Nếu như
lệnh được kết thúc bằng một tín hiệu, đi lạc tự kết thúc với
cùng một tín hiệu, do đó đi lạc có thể được sử dụng như một quy trình trình bao bọc
minh bạch với tiến trình mẹ đang gọi. Lưu ý rằng cha mẹ-
quan hệ con (thông báo dừng tín hiệu, giá trị getppid (),
vv) giữa quy trình được theo dõi và quy trình gốc của nó không được bảo toàn
trừ khi -D Được sử dụng.
Khi đang sử dụng -p, trạng thái thoát của đi lạc bằng XNUMX trừ khi ở đó
là một lỗi không mong muốn khi thực hiện theo dõi.
CÀI ĐẶT LẮP ĐẶT
If đi lạc được cài đặt setuid thành root sau đó người dùng đang gọi
sẽ có thể đính kèm và theo dõi các quy trình do bất kỳ người dùng nào sở hữu.
Ngoài ra, các chương trình setuid và setgid sẽ được thực thi và
được truy tìm với các đặc quyền hiệu quả chính xác. Vì chỉ người dùng
đáng tin cậy với các đặc quyền root đầy đủ nên được phép làm những điều này
mọi thứ, nó chỉ có ý nghĩa khi cài đặt đi lạc như setuid cho root
khi những người dùng có thể thực thi nó bị hạn chế đối với những người dùng đó
người có sự tin tưởng này. Ví dụ, bạn nên cài đặt một
phiên bản đặc biệt của đi lạc với chế độ 'rwsr-xr--', người dùng nguồn gốc và
nhóm theo dõi, nơi các thành viên của theo dõi nhóm là những người dùng đáng tin cậy.
Nếu bạn sử dụng tính năng này, hãy nhớ cài đặt
phiên bản setuid của đi lạc cho các bộ đệm thông thường để sử dụng.
Sử dụng trực tuyến strace64 bằng các dịch vụ onworks.net
