คำถามติดแท็ก strace

strace เป็นยูทิลิตี้การดีบักสำหรับการติดตามการเรียกระบบและสัญญาณภายใต้ Linux

5
รายการไฟล์ที่เข้าถึงโดยโปรแกรม
time เป็นคำสั่งที่ยอดเยี่ยมถ้าคุณต้องการที่จะคำนวณเวลาของ CPU ที่คำสั่งที่ได้รับ ฉันกำลังมองหาสิ่งที่คล้ายกันซึ่งสามารถแสดงรายการไฟล์ที่โปรแกรมและลูก ๆ ของคุณเข้าถึงได้ ไม่ว่าจะเป็นแบบเรียลไทม์หรือเป็นรายงานในภายหลัง ปัจจุบันฉันใช้: #!/bin/bash strace -ff -e trace=file "$@" 2>&1 | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print' sudoแต่ล้มเหลวหากคำสั่งในการทำงานที่เกี่ยวข้องกับการ มันไม่ได้ฉลาดมาก (มันจะดีถ้ามันสามารถแสดงรายการไฟล์ที่มีอยู่หรือมีปัญหาสิทธิ์หรือจัดกลุ่มเป็นไฟล์ที่อ่านและไฟล์ที่เขียน) นอกจากนี้ยังstraceเป็นไปอย่างช้าดังนั้นมันจะดีกับทางเลือกที่เร็วขึ้น

1
การเชื่อมต่อกับ IP 0.0.0.0 สำเร็จ อย่างไร? ทำไม?
เราให้บริการพอร์ตบนโลคัลโฮสต์และต้องการเช็คอินกระบวนการอื่นหากพอร์ตพร้อมใช้งาน เนื่องจากข้อผิดพลาดในรหัสของเราเป็นจริงพยายามเชื่อมต่อกับ IP 0.0.0.0:<port>และด้วยเหตุผลบางอย่างมันประสบความสำเร็จ - เป็น strace พิสูจน์: [...] connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 [...] มันหมายความว่าอะไร? ทำไมมันทำงาน
41 networking  tcp  strace 

1
ท่อ strace ถึง grep
ฉันพยายามวิ่งstraceรางcczeและท่อไม่ทำงานตามที่คาดไว้ บรรทัดคำสั่งที่ฉันใช้เพื่อทดสอบคือsudo strace -p $(pgrep apache2) | grep openและบรรทัดทั้งหมดเป็นเอาต์พุตโดยไม่สนใจ grep มีอะไรพิเศษเกี่ยวกับstraceสิ่งนี้ที่ทำให้เกิดพฤติกรรมนี้หรือไม่?

5
การเรียกระบบใดที่ใช้เพื่อโหลดไลบรารีใน Linux
ในstraceเอาต์พุตพา ธ ไปยังไลบรารีที่เรียกใช้งานการเรียกใช้อยู่ในการเรียกopen()ใช้ นี่เป็นการเรียกระบบที่ใช้โดยโปรแกรมที่เชื่อมโยงแบบไดนามิกหรือไม่? เกี่ยวกับdlopen()อะไร open()ไม่ใช่สายที่ฉันเดาได้ว่าจะมีบทบาทในการทำงานของโปรแกรม

1
การติดตามการปฏิบัติการที่ไม่มีสิทธิ์อ่าน
ฉันพบพฤติกรรมที่น่าประหลาดใจบางอย่างบน Ubuntu 14.04 เมื่อใช้งานstraceกับไฟล์ปฏิบัติการซึ่งฉันไม่ได้รับอนุญาตให้อ่าน ฉันสงสัยว่านี่เป็นข้อผิดพลาดหรือว่ามาตรฐานบางอย่างทำให้พฤติกรรมที่คลุมเครือนี้ ก่อนอื่นเรามาดูกันว่าเกิดอะไรขึ้นเมื่อฉันเริ่มต้นปฏิบัติการปกติในพื้นหลังและแนบมัน ตามที่คาดไว้ใช้งานได้: $ /bin/sleep 100 & [2] 8078 $ strace -p 8078 Process 8078 attached restart_syscall(<... resuming interrupted call ...> ต่อไปฉันลองใช้ไฟล์ปฏิบัติการซึ่งฉันไม่ได้รับอนุญาตให้อ่าน: ---x--x--x 1 root root 26280 Sep 3 09:37 sleep* ไม่อนุญาตให้เชื่อมต่อกับกระบวนการทำงานนี้: $ ./sleep 100 & [1] 8089 $ strace -p 8089 strace: attach: ptrace(PTRACE_ATTACH, ...): …

4
วิธีการติดตามกิจกรรมเครือข่ายของคำสั่ง?
ฉันต้องการติดตามกิจกรรมเครือข่ายของคำสั่งฉันลอง tcpdump และ strace ไม่สำเร็จ ตัวอย่างเช่นหากฉันกำลังติดตั้งแพคเกจหรือใช้คำสั่งใด ๆ ที่พยายามเข้าถึงบางไซต์ฉันต้องการดูกิจกรรมเครือข่ายนั้น (ไซต์ที่พยายามเข้าถึง) ฉันเดาว่าเราสามารถทำได้โดยใช้ tcpdump ฉันพยายาม แต่มันกำลังติดตามกิจกรรมเครือข่ายทั้งหมดของระบบของฉัน สมมติว่าถ้าฉันใช้คำสั่งที่เกี่ยวข้องกับเครือข่ายหลายเครือข่ายและฉันต้องการติดตามเฉพาะกิจกรรมเครือข่ายคำสั่งเฉพาะเวลานั้นยากที่จะหาคำตอบที่แน่นอน มีวิธีทำเช่นนั้นหรือไม่? UPDATE: ฉันไม่ต้องการติดตามทุกสิ่งที่เกิดขึ้นบนอินเทอร์เฟซเครือข่ายของฉัน ฉันต้องการติดตามคำสั่ง (สำหรับตัวอย่างกิจกรรมเครือข่าย #yum install -y vim) เช่นเว็บไซต์ที่พยายามเข้าถึง

1
ไฟล์ปฏิบัติการที่ชื่อ 'ทดสอบ' อยู่ใน $ PATH แต่จะไม่ทำงาน
ฉันมีไฟล์ใน $ HOME / bin (ก่อนที่คุณจะถามใช่มันอยู่ในเส้นทางของฉัน) เรียกว่าtestฉันยืนยันว่าสามารถดำเนินการได้ดีเมื่อฉันรันด้วยพา ธ เต็มไปยังไฟล์ อย่างไรก็ตามฉันได้รับปัญหาแปลก ๆ จริง ๆ เมื่อฉันไม่เรียกใช้วิธีนี้ เมื่อฉันเพิ่งรันtestในเทอร์มินัลมันไม่ทำอะไรเลยและส่งคืนทันที ฉันรู้ว่านี่ไม่ใช่ปัญหาในการค้นหาไฟล์ด้วยเหตุผลหลายประการ: ไม่มีข้อความแสดงข้อผิดพลาด โดยปกติหากไม่พบไฟล์หรือไม่สามารถดำเนินการข้อความจะถูกพิมพ์ออกมาโดยบอกว่า การรันwhich testยังคงส่งคืนพา ธ ไฟล์ที่ถูกต้อง น่าจะเป็นที่แปลกประหลาดของทั้งหมด - straceสคริปต์ที่ทำงานได้ดีเมื่อวิ่งผ่าน ฉันพยายามใช้straceเพื่อดูว่าฉันสามารถทราบได้ว่าเกิดอะไรขึ้น แต่เมื่อฉันใช้งานด้วยstraceมันทำงานได้อย่างที่คาดไว้กับปัญหา 0 ข้อ

3
เป็นไปได้หรือไม่ที่จะใช้คำสั่ง builtin กับ Bash?
ได้รับแรงบันดาลใจจากคำถามนี้ชื่อ: เมื่อใดที่คำสั่งในตัวถูกโหลดไปยังหน่วยความจำในขณะที่พยายามตอบคำถามนี้ฉันลองใช้คำสั่งต่อไปนี้และรู้สึกประหลาดใจเล็กน้อยที่ฉันไม่สามารถเรียกใช้: $ strace cd $HOME มีวิธีที่ฉันสามารถใช้เพื่อรัน strace สำหรับคำสั่ง builtin เพื่อ Bash หรือไม่?
13 bash  debugging  strace 

1
Bash พยายามเขียน prompt สองตัวหรือไม่
ฉันกำลังดูผลลัพธ์ strace ของกระบวนการทุบตีทำงานที่เชื่อมต่อกับเทอร์มินัลเพื่อการศึกษา กระบวนการทุบตีของฉันมี PID 2883 ฉันพิมพ์ [OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace เข้าสู่อาคารผู้โดยสาร จากนั้นฉันก็เข้าสู่กระบวนการทุบตีของฉันและมีปฏิสัมพันธ์ต่อไปนี้: [OP@localhost ~]$ ls ฉันมองเห็นผลลัพธ์ strace: Process 2883 attached read(0, "l", 1) = 1 write(2, "l", 1) = 1 read(0, "s", 1) = 1 write(2, "s", 1) = 1 read(0, "\r", 1) = …
11 bash  tty  strace 

1
ทำไม `strace 'ไม่แสดงว่ากระบวนการนี้กำลังรออะไรอยู่
อันยิ่งใหญ่straceได้ทำให้ฉันผิดหวัง เป็นไปได้อย่างไร? time fooแสดงให้เห็นว่าfooใช้เวลาหลายวินาทีในการเรียกใช้ ("ของจริง") แต่ใช้เวลา cpu เล็กน้อยทั้งใน userspace ("ผู้ใช้") และในเคอร์เนล ("sys") สำหรับผู้อยากรู้อยากเห็นfooมีการกำหนดไว้ด้านล่าง ดังนั้นจึงใช้เวลาส่วนใหญ่รออย่างอื่นไม่ดำเนินการตามคำสั่งของ CPU โดยปกติแล้วฉันจะเห็นว่ามันกำลังรออยู่strace- นั่นคือสิ่งที่การโทรของระบบถูกปิดกั้นเป็นเวลานาน น่าเสียดายที่วิธีนี้ใช้ไม่ได้ผล strace -ttt -T -C -w fooแสดงการเรียกระบบการประทับเวลาและสรุปเวลา (จริง) ที่ใช้ในการโทรของระบบ แต่กระบวนการนี้แสดงให้เห็นว่าการใช้เวลาเล็กน้อยโดยรวม (จริง) ในการโทรของระบบ foojournalctl -b -u dev-hugepages.mountเป็นจริง ยกเว้นว่าฉันต้องเปลี่ยนอาร์กิวเมนต์สุดท้ายเป็นหน่วย systemd ที่แตกต่างกันในแต่ละครั้งเพื่อทำซ้ำสิ่งนี้ กล่าวอีกนัยหนึ่งความล่าช้าที่ฉันกำลังตรวจสอบเกิดขึ้นในครั้งแรกที่ฉันพยายามรับบันทึกสำหรับหน่วย systemd ใดหน่วยหนึ่ง แก้ไข : หลังจากตอบคำถามหลักผมยังตระหนักถึงเหตุผลที่ผมมีปัญหานี้ซ้ำล่าช้า เวลาที่ใช้ในกระบวนการนี้เป็นปัญหาเฉพาะดูเหมือนว่ามันจะไม่เกิดขึ้นในทุกระบบ https://github.com/systemd/systemd/issues/7963

3
หน่วยเวลาที่ strace ใช้คืออะไรเมื่อแสดงเวลาที่ใช้ใน syscalls
เมื่อใช้คำสั่งstraceกับการตั้งค่าสถานะ-Tฉันต้องการที่จะรู้ว่าหน่วยเวลาที่ใช้ในการแสดงเวลาที่ใช้ใน syscalls คืออะไร? ฉันคิดว่ามันควรจะเป็นในไม่กี่วินาที แต่ฉันไม่แน่ใจและดูเหมือนว่าจะถูกตัดออกจากคู่มือ

2
strace ที่ใช้งานตามระยะเวลาที่กำหนด
วิธีการเรียกใช้ strace ในกระบวนการผู้ใช้สำหรับช่วงเวลาที่ระบุพูด 1 นาทีโดยไม่ต้องยกเลิกกระบวนการผู้ใช้และไม่ใช้ Ctrl + C? ฉันต้องการสร้างสคริปต์เพื่อทำให้การดำเนินการสเตรซอัตโนมัติสำหรับกระบวนการผู้ใช้
9 strace 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.