วิธีการใช้ strace ระบบลินุกซ์จอภาพโทร

Jun 23, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock.com

โปรแกรม Linux ถาม เคอร์เนล ทำบางสิ่งให้พวกเขา NS การสึกกร่อน คำสั่งเผยให้เห็นการเรียกระบบเหล่านี้ คุณสามารถใช้พวกเขาเพื่อทำความเข้าใจว่าโปรแกรมทำงานอย่างไรและทำไมบางครั้งพวกเขาไม่ทำ

เคอร์เนลและการเรียกระบบ

ฉลาดเท่าที่พวกเขาอาจจะเป็นโปรแกรมคอมพิวเตอร์ไม่สามารถทำทุกอย่างเพื่อตัวเอง พวกเขาต้องทำการร้องขอให้มีฟังก์ชั่นบางอย่างที่ดำเนินการสำหรับพวกเขา คำขอเหล่านี้ไปที่เคอร์เนล Linux โดยทั่วไปแล้วจะมีห้องสมุดหรืออินเทอร์เฟซซอฟต์แวร์อื่น ๆ ที่เรียกใช้โปรแกรมและห้องสมุดจะทำให้คำขอที่เรียกว่าการเรียกระบบไปยังเคอร์เนล

ความสามารถในการดูระบบเรียกว่าโปรแกรมทำและสิ่งที่คำตอบสามารถช่วยให้คุณเข้าใจการทำงานภายในของโปรแกรมที่คุณสนใจหรือที่คุณเขียน นี่คือ อะไร การสึกกร่อน ทำ . สามารถช่วยแก้ไขปัญหาและมองหาคอขวด

นี่ไม่เหมือนกับ การดีบักแอปพลิเคชัน ด้วยเครื่องมือเช่น gdb . โปรแกรมการดีบักช่วยให้คุณตรวจสอบการทำงานภายในของโปรแกรมเมื่อทำงาน ช่วยให้คุณสามารถผ่านตรรกะของโปรแกรมของคุณและตรวจสอบหน่วยความจำและค่าตัวแปร โดยการเปรียบเทียบอะไร การสึกกร่อน การจับข้อมูลการโทรของระบบเนื่องจากโปรแกรมกำลังทำงานอยู่ เมื่อโปรแกรม traced สิ้นสุดลง การสึกกร่อน แสดงรายการข้อมูลการโทรไปยังหน้าต่างเทอร์มินัล

การเรียกระบบให้ฟังก์ชั่นระดับต่ำทุกประเภทเช่นการอ่านและเขียนบนไฟล์กระบวนการฆ่าและอื่น ๆ มีรายการของการเรียกระบบหลายร้อยรายการใน Syscalls Man Page .

ที่เกี่ยวข้อง: การดีบักด้วย GDB: เริ่มต้นใช้งาน

การติดตั้ง Strace

ถ้า การสึกกร่อน ยังไม่ได้ติดตั้งในคอมพิวเตอร์ของคุณคุณสามารถติดตั้งได้ง่ายมาก

บน Ubuntu ให้ใช้คำสั่งนี้:

 Sudo Apt ติดตั้ง Strace 

บน Fedora ให้พิมพ์คำสั่งนี้:

 Sudo DNF ติดตั้ง Strace 

บน Manjaro คำสั่งคือ:

 Sudo Pacman -sy Strace 

ขั้นตอนแรกที่มีการสเตรซ

เราจะใช้โปรแกรมขนาดเล็กเพื่อแสดงให้เห็น การสึกกร่อน . มันไม่ได้ทำอะไรมาก: มันเปิดไฟล์และเขียนบรรทัดของข้อความลงไปและไม่มีการตรวจสอบข้อผิดพลาดใด ๆ มันเป็นเพียงแฮ็คที่รวดเร็วเพื่อให้เรามีบางอย่างที่ใช้กับ การสึกกร่อน .

 #include & lt; stdio.h & gt;

int main (int argc, argv argv []) {

  // จัดการไฟล์
  ไฟล์ * FileGeek;

  // เปิดไฟล์ที่เรียกว่า "strace_demo.txt" หรือสร้าง
  FileGeek = FOPEN ("stace_demo.txt", "w");

  // เขียนข้อความไปยังไฟล์
  FPRINTF (FileGeek, "เขียนไฟล์นี้ลงในไฟล์");

  // ปิดไฟล์
  Fclose (FileGeek);

  // ออกจากโปรแกรม
  ส่งคืน (0);

} // สิ้นสุดหลัก 

เราบันทึกสิ่งนี้ลงในไฟล์ที่เรียกว่า "file-io.c" และรวบรวมด้วย gcc เป็นที่เรียกว่าเรียกว่า การฟ้องร้อง ตั้งชื่อตาม " เซนต์ แข่ง อดีต เหลือเฟือ. "

 GCC -O Stex File-IO.C 

เราจะโทร การสึกกร่อน จากบรรทัดคำสั่งและส่งชื่อของไฟล์ปฏิบัติการใหม่ของเราเป็นกระบวนการที่เราต้องการติดตาม เราสามารถติดตามคำสั่งลินุกซ์ได้อย่างง่ายดายหรือสามารถเรียกใช้งานไบนารีอื่น ๆ ได้อย่างง่ายดาย เรากำลังใช้โปรแกรมเล็ก ๆ ของเราด้วยเหตุผลสองประการ

เหตุผลแรกคือ การสึกกร่อน เป็น verbose สามารถมีเอาต์พุตได้มาก มันเยี่ยมมากเมื่อคุณใช้ การสึกกร่อน ในความโกรธ แต่มันอาจล้นหลามในตอนแรก มีจำนวน จำกัด การสึกกร่อน เอาท์พุทสำหรับโปรแกรมเล็ก ๆ ของเรา เหตุผลที่สองคือโปรแกรมของเรามีฟังก์ชั่น จำกัด และรหัสที่มาสั้นและตรงไปตรงมา สิ่งนี้ทำให้ง่ายต่อการระบุส่วนใดของผลลัพธ์ที่อ้างถึงส่วนต่าง ๆ ของการทำงานภายในของโปรแกรม

 strace ./stex967]
  

เราสามารถเห็นได้อย่างชัดเจน เขียน การโทรระบบส่งข้อความ "เขียนไฟล์นี้ไปยังไฟล์" ไปยังไฟล์ที่เปิดของเราและ exit_group การเรียกระบบ สิ่งนี้จะยกเลิกเธรดทั้งหมดในแอปพลิเคชันและส่งค่าส่งคืนกลับไปที่เชลล์

กรองเอาต์พุต

แม้จะมีโปรแกรมสาธิตอย่างง่ายของเรา แต่ก็มีเอาต์พุตค่อนข้างมาก เราสามารถใช้ - ตัวเลือก (นิพจน์) เราจะส่งผ่านชื่อของการเรียกระบบที่เราต้องการดู

 Strace -e เขียน ./stex907]
  

คุณสามารถรายงานการโทรหลายระบบโดยการเพิ่มเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค อย่าใส่ช่องว่างใด ๆ ในรายการการเรียกระบบ

 Strace -e ปิดเขียน ./stex907]
  

ส่งเอาต์พุตไปยังไฟล์

ประโยชน์ของการกรองเอาต์พุตยังเป็นปัญหากับการกรองเอาต์พุต คุณเห็นสิ่งที่คุณขอดู แต่คุณไม่เห็นสิ่งอื่นใด และบางส่วนของผลลัพธ์อื่น ๆ อาจมีประโยชน์มากกว่าคุณมากกว่าสิ่งที่คุณขอให้ดู

บางครั้งมันสะดวกกว่าที่จะจับทุกอย่างและค้นหาและเลื่อนดูผลลัพธ์ทั้งหมด ด้วยวิธีนี้คุณจะไม่แยกอะไรที่สำคัญ NS - ตัวเลือก (เอาท์พุท) ช่วยให้คุณส่งเอาต์พุตจาก การสึกกร่อน เซสชันไปยังไฟล์ข้อความ

 strace -o trace-output.txt ./stex967]
  

คุณสามารถ ใช้ น้อย สั่งการ หากต้องการเลื่อนดูรายชื่อและค้นหาการเรียกระบบ - หรือสิ่งอื่นใดโดยใช้ชื่อ

 Trace-Output.txt น้อยลง 

ตอนนี้คุณสามารถใช้ทั้งหมด น้อย ความสามารถในการค้นหาเพื่อตรวจสอบผลลัพธ์

ที่เกี่ยวข้อง: วิธีใช้คำสั่งน้อยลงบน Linux

การเพิ่มการประทับเวลา

คุณสามารถเพิ่มการประทับเวลาที่แตกต่างกันหลายรายการไปยังเอาต์พุต NS -NS ตัวเลือก (การประทับเวลาสัมพัทธ์) เพิ่มการประทับเวลาที่แสดงความแตกต่างของเวลาระหว่างการเริ่มต้นของการเรียกระบบต่อเนื่องแต่ละครั้ง โปรดทราบว่าค่าเวลาเหล่านี้จะรวมถึงเวลาที่ใช้ในการเรียกระบบก่อนหน้านี้และสิ่งอื่นใดที่โปรแกรมทำก่อนการเรียกระบบครั้งต่อไป

 Strace -r ./stex967]
  

การประทับเวลาจะปรากฏขึ้นเมื่อเริ่มต้นของแต่ละบรรทัดของเอาต์พุต

หากต้องการดูจำนวนเวลาที่ใช้ในการโทรแต่ละระบบให้ใช้ -NS ตัวเลือก (syscall-times) นี่แสดงให้เห็นถึงระยะเวลาของเวลาที่ใช้ในการเรียกแต่ละระบบ

 Strace -t ./stex967]
  

ระยะเวลาจะแสดงในตอนท้ายของแต่ละสายการโทร

เพื่อดูเวลาที่เรียกว่าการเรียกแต่ละระบบให้ใช้ -tt ตัวเลือกการประทับเวลาที่แน่นอน) นี่แสดงให้เห็นถึงเวลา "นาฬิกาแขวน" ด้วยความละเอียด microsecond

 Strace -tt ./stex967]
  

เวลาจะแสดงในช่วงเริ่มต้นของแต่ละบรรทัด

[254 255]

ติดตามกระบวนการทำงาน

หากกระบวนการที่คุณต้องการร่องรอยกำลังทำงานอยู่แล้วคุณยังสามารถแนบได้ การสึกกร่อน มัน. ในการทำเช่นนั้นคุณต้องทราบรหัสกระบวนการ คุณสามารถ ใช้ ป.ล. กับ ไขว้ เพื่อค้นหาสิ่งนี้ เรามี Firefox ทำงาน เพื่อค้นหา ID ของ ไฟดับเพลิง กระบวนการเราสามารถใช้ ป.ล. และ ท่อผ่าน ไขว้ .

 PS -e | Grep Firefox 

เราสามารถเห็นได้ว่ารหัสกระบวนการคือ 8483 เราจะใช้ -NS ตัวเลือกรหัสกระบวนการ) ที่จะบอก การสึกกร่อน กระบวนการใดที่จะแนบไปกับ โปรดทราบว่าคุณจะต้องใช้ sudo :

 Sudo Strace -p 8483 

คุณจะเห็นการแจ้งเตือนที่ การสึกกร่อน ได้แนบตัวเองไปยังกระบวนการแล้วระบบติดตามการติดตามจะปรากฏในหน้าต่างเทอร์มินัลตามปกติ

สร้างรายงาน

NS -ค (สรุปเฉพาะ) สาเหตุตัวเลือก การสึกกร่อน เพื่อพิมพ์รายงาน มันสร้างตารางสำหรับข้อมูลเกี่ยวกับการเรียกระบบที่ทำโดยโปรแกรมที่ติดตาม

 Strace -c ./stex967]
  

คอลัมน์คือ:

  • % เวลา : เปอร์เซ็นต์ของเวลาดำเนินการที่ใช้ในการเรียกแต่ละระบบ
  • วินาที : เวลาทั้งหมดที่แสดงในไม่กี่วินาทีและไมโครวินาทีที่ใช้ในการเรียกระบบแต่ละครั้ง
  • USECS / CALL : เวลาเฉลี่ยในไมโครวินาทีที่ใช้ในการเรียกแต่ละระบบ
  • การโทร : จำนวนครั้งที่ดำเนินการเรียกแต่ละระบบ
  • ข้อผิดพลาด : จำนวนความล้มเหลวสำหรับการเรียกแต่ละระบบ
  • สรีระ : ชื่อของการเรียกระบบ

ค่าเหล่านี้จะแสดงศูนย์สำหรับโปรแกรมที่น่ารำคาญที่ดำเนินการและยกเลิกอย่างรวดเร็ว ค่านิยมในโลกแห่งความจริงจะแสดงสำหรับโปรแกรมที่ทำสิ่งที่มีความหมายมากกว่าแอปพลิเคชันสาธิตของเรา

ข้อมูลเชิงลึกลึกง่าย

NS การสึกกร่อน เอาท์พุทสามารถแสดงให้คุณเห็นว่าการเรียกใช้ระบบใดที่กำลังทำสิ่งที่เกิดขึ้นซ้ำ ๆ และใช้เวลาในการดำเนินการมากแค่ไหน นั่นเป็นข้อมูลที่ดี บ่อยครั้งที่คุณพยายามที่จะเข้าใจสิ่งที่เกิดขึ้นในรหัสของคุณมันง่ายที่จะลืมว่าไบนารีของคุณมีปฏิสัมพันธ์เกือบไม่หยุดนิ่งกับเคอร์เนลเพื่อทำหน้าที่หลายอย่าง

โดยใช้ การสึกกร่อน คุณเห็นภาพที่สมบูรณ์


Linux - บทความยอดนิยม

วิธีการกระบวนการฆ่าซอมบี้บนลินุกซ์

Linux Nov 25, 2024

Fatmawati Achmad Zaenuri / Shutterstock โปรแกรมที่เขียนไม่ดีหรือการแสดงไม่ดีสาม�..


วิธีจัดการเซิร์ฟเวอร์ Linux กับ Cockpit Web Interface

Linux Dec 9, 2024

Fatmawati Achmad Zaenuri / Shutterstock คุณสามารถตรวจสอบและจัดการเครื่องคอมพิวเ�..


มีอะไรใหม่ใน GNOME 40

Linux Jul 23, 2025

มูลนิธิ GNOME GNOME 40 มีมากกว่าโครงการหมายเลขใหม่ พร้อมกับรูปล�..


มีอะไรใหม่ใน Debian 11“เป้า”

Linux Jul 22, 2025

เดเบียน , กำเนิดของการแจกแจง Linux อื่น ๆ อีกมากมายได้ทำการเปิดตัว 11..


มีอะไรใหม่ในระดับประถมศึกษา 6 "Odin"

Linux Aug 14, 2025

Elementary, Inc. มี การกระจายลินุกซ์จำนวนมาก (Distros) ที่ผู้คนอ้างว่าเ�..


Ubuntu 21.10 ถึงกับกำหนดเอง GNOME 40 สก์ท็อป

Linux Oct 14, 2025

อูบุนตู หากคุณเป็นผู้ใช้ Ubuntu หรือคนที่คิดเกี่ยวกับการลองวัน�..


วิธีการอัปเดต Fedora Linux

Linux Nov 10, 2024

ดังนั้นในที่สุดคุณก็ดาวน์โหลดและติดตั้ง Fedora Linux แต่ตอนนี้คุณอาจสงสั..


วิธีการล้าง DNS ใน Linux

Linux Nov 14, 2024

ประสบการณ์การท่องอินเทอร์เน็ตของคุณช้าบนอุปกรณ์ Linux ของคุณหรือเป็นเ..


หมวดหมู่