โปรแกรม 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ตัวเลือกการประทับเวลาที่แน่นอน) นี่แสดงให้เห็นถึงเวลา "นาฬิกาแขวน" ด้วยความละเอียด microsecondStrace -tt ./stex967]
![]()
เวลาจะแสดงในช่วงเริ่มต้นของแต่ละบรรทัด
[254 255]
ติดตามกระบวนการทำงาน
หากกระบวนการที่คุณต้องการร่องรอยกำลังทำงานอยู่แล้วคุณยังสามารถแนบได้
การสึกกร่อนมัน. ในการทำเช่นนั้นคุณต้องทราบรหัสกระบวนการ คุณสามารถ ใช้ป.ล.กับไขว้เพื่อค้นหาสิ่งนี้ เรามี Firefox ทำงาน เพื่อค้นหา ID ของไฟดับเพลิงกระบวนการเราสามารถใช้ป.ล.และ ท่อผ่านไขว้.PS -e | Grep Firefox
![]()
เราสามารถเห็นได้ว่ารหัสกระบวนการคือ 8483 เราจะใช้
-NSตัวเลือกรหัสกระบวนการ) ที่จะบอกการสึกกร่อนกระบวนการใดที่จะแนบไปกับ โปรดทราบว่าคุณจะต้องใช้sudo:Sudo Strace -p 8483
![]()
คุณจะเห็นการแจ้งเตือนที่
การสึกกร่อนได้แนบตัวเองไปยังกระบวนการแล้วระบบติดตามการติดตามจะปรากฏในหน้าต่างเทอร์มินัลตามปกติ
![]()
สร้างรายงาน
NS
-ค(สรุปเฉพาะ) สาเหตุตัวเลือกการสึกกร่อนเพื่อพิมพ์รายงาน มันสร้างตารางสำหรับข้อมูลเกี่ยวกับการเรียกระบบที่ทำโดยโปรแกรมที่ติดตามStrace -c ./stex967]
![]()
คอลัมน์คือ:
- % เวลา : เปอร์เซ็นต์ของเวลาดำเนินการที่ใช้ในการเรียกแต่ละระบบ
- วินาที : เวลาทั้งหมดที่แสดงในไม่กี่วินาทีและไมโครวินาทีที่ใช้ในการเรียกระบบแต่ละครั้ง
- USECS / CALL : เวลาเฉลี่ยในไมโครวินาทีที่ใช้ในการเรียกแต่ละระบบ
- การโทร : จำนวนครั้งที่ดำเนินการเรียกแต่ละระบบ
- ข้อผิดพลาด : จำนวนความล้มเหลวสำหรับการเรียกแต่ละระบบ
- สรีระ : ชื่อของการเรียกระบบ
ค่าเหล่านี้จะแสดงศูนย์สำหรับโปรแกรมที่น่ารำคาญที่ดำเนินการและยกเลิกอย่างรวดเร็ว ค่านิยมในโลกแห่งความจริงจะแสดงสำหรับโปรแกรมที่ทำสิ่งที่มีความหมายมากกว่าแอปพลิเคชันสาธิตของเรา
ข้อมูลเชิงลึกลึกง่าย
NS
การสึกกร่อน
เอาท์พุทสามารถแสดงให้คุณเห็นว่าการเรียกใช้ระบบใดที่กำลังทำสิ่งที่เกิดขึ้นซ้ำ ๆ และใช้เวลาในการดำเนินการมากแค่ไหน นั่นเป็นข้อมูลที่ดี บ่อยครั้งที่คุณพยายามที่จะเข้าใจสิ่งที่เกิดขึ้นในรหัสของคุณมันง่ายที่จะลืมว่าไบนารีของคุณมีปฏิสัมพันธ์เกือบไม่หยุดนิ่งกับเคอร์เนลเพื่อทำหน้าที่หลายอย่าง
โดยใช้
การสึกกร่อน
คุณเห็นภาพที่สมบูรณ์