כיצד להשתמש strace כדי מערכת שיחות לינוקס צג

Jun 23, 2025
לינוקס
fatmawati Achmad zaenuri / Shutterstock.com

תוכניות לינוקס לשאול את גַרעִין כדי לעשות כמה דברים עבורם. ה סטריאו הפקודה מגלה שיחות המערכת אלה. אתה יכול להשתמש בהם כדי להבין איך תוכניות עובדים ומדוע, לפעמים, הם לא.

שיחות הליבה והמערכת

חכם כמו שהם עלולים להיות, תוכנות מחשב לא יכולות לעשות הכל בעצמם. הם צריכים להגיש בקשות יש פונקציות מסוימות שבוצעו עבורם. בקשות אלה ללכת הקרנל לינוקס. בדרך כלל, יש ממשק תוכנת ספרייה או אחר כי שיחות התכנית, והספרייה אז מעבירים את הבקשה שנקראה מתאים מערכה קריאה הקרנל.

יכולת לראות את הקריאות במערכת כי תכנית עושה ומה היו התגובות יכולות לעזור לך להבין את המנגנון הפנימי של תוכניות שמעניינות אתכם או שהכתבת. זה מה סטריאו עושה . זה יכול לעזור בנושאים פתרון ולחפש צווארי בקבוק.

זה לא אותו הדבר כמו באגים יישום עם כלי כמו gdb . תכנית באגים מאפשרת לך לחקור את הניתוח הפנימי של תכנית כפי שהוא פועל. הוא מאפשר לך לדרוך דרך ההיגיון של התוכנית שלך ולבדוק וזיכרון וערכים משתנים. לשם השוואה, מה סטריאו עושה זה ללכוד את מידע קריאת מערכת כתכנית פועל. כאשר התוכנית מסתיימת לייחס, סטריאו מפרטת את המידע קריאת המערכת לחלון הטרמינל.

שיחות מערכת לספק כל מיני פונקציונליות ברמה נמוכה, כגון פעולות קריאה וכתיבה על קבצים, תהליכים להרוג, וכן הלאה. יש רשימה של מאות שיחות מערכת על syscalls דף גבר .

קָשׁוּר: Debugging עם GDB: תחילת עבודה

התקנת strace

אם סטריאו כבר לא מותקן במחשב שלך, אתה יכול להתקין אותו בקלות רבה.

על אובונטו, להשתמש בפקודה זו:

 sudo apt להתקין strace 

על פדורה, הקלד את הפקודה:

 sudo DNF להתקין strace 

ביום Manjaro, הפקודה היא:

 sudo pacman -Sy strace 

צעדים ראשונים עם strace

נשתמש תוכנית קטנה להפגין סטריאו . זה לא עושה הרבה: הוא פותח את קובץ וכותב שורת טקסט אליו, וזה אין שום בדיקת שגיאות בה. זה פשוט גרזן מהיר כך שיש לנו משהו לשימוש עם סטריאו .

 #include & lt; stdio.h & gt;

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

  // ידית קובץ
  FILE * fileGeek;

  // לפתוח קובץ בשם "strace_demo.txt", או ליצור אותו
  fileGeek = fopen ( "strace_demo.txt", "W");

  // לכתוב טקסט כלשהו לקובץ
  fprintf (fileGeek, "כתוב את זה לקובץ");

  // לסגור את התיק
  fclose (fileGeek);

  // יציאה מתוכנית
  לחזור (0);

} // סוף הראשי 

חסכנו זה לתוך קובץ בשם "קובץ-io.c" ונערך זה עם ג"ץ לתוך הפעלה המכונית stex , על שם " רחוב גזע לְשֶׁעָבַר מַסְפִּיק."

 gcc -o stex קבצים io.c 

אנחנו נתקשר סטריאו משורת הפקודה ולהעביר את קובץ הרצת החדש שלנו אליו כאל תהליך שאנחנו רוצים יש לייחס. אנחנו יכולים באותה קלות להתחקות כל הפקודות לינוקס או כל הפעלה בינאריים אחרים. אנו משתמשים בתכנית הזעירה שלנו משתי סיבות.

הסיבה הראשונה היא כי סטריאו הוא מפורט. יכול להיות הרבה תפוקה. זה נהדר כאשר אתה משתמש סטריאו בכעס, אבל זה יכול להיות מכריע בהתחלה. יש מוגבל סטריאו פלט עבור התכנית הזעירה שלנו. הסיבה השנייה היא כי התכנית שלנו יש פונקציונליות מוגבלת, ואת קוד המקור הוא קצר וישיר. זה מקל לזהות אילו חלקים של הפלט מעיינים בחלקים השונים של המנגנון הפנימי של התכנית.

 strace ./stex

אנו יכולים לראות בבירור את לִכתוֹב קריאת המערכת שולחת את הטקסט "כתוב את זה לקובץ" קובץ נפתח שלנו ואת exit_group קריאת המערכת. זו תפקע כל הנושאים ביישום ושולח בחזרה ערך החזרה הקליפה.

סינון הפלט

אפילו עם תוכנית ההפגנה פשוט שלנו, יש די הרבה תפוקה. אנו יכולים להשתמש - אפשרות (ביטוי). אנחנו עוברים על פני שמו של קריאת המערכת שאנחנו רוצים לראות.

 strace -e כתיבה ./stex

אתה יכול לדווח על שיחות מערכת מרובים ידי הוסיף כרשימה מופרדת בפסיקים. אין לכלול רווחים ברשימת שיחות המערכת.

 strace -e קרוב, כתיבה ./stex

שליחת הפלט לקובץ

היתרון של סינון התפוקה היא גם בעיה עם סינון הפלט. אתה רואה מה שאתה ביקשת לראות, אבל אתה לא רואה שום דבר אחר. וחלק כי פלט אחרים עשוי להיות שימושי יותר מאשר לך את הדברים שאתה ביקשת לראות.

לפעמים, זה יותר נוח הכל ללכוד ולחפש וגלילה באמצעות הסט השלם של תוצאות. ככה, אתה לא תהיה הדרה בטעות משהו חשוב. ה - (פלט) אפשרות מאפשרת לך לשלוח את הפלט של סטריאו מושב לקובץ טקסט.

 strace -O עקבות-output.txt ./stex

אז אתה יכול להשתמש ב פָּחוּת פקודה כדי לגלול רשימה ולחפש שיחות-או מערכת דבר אחר-ידי שם.

 פחות עקבות-output.txt 

עכשיו אתה יכול להשתמש בכל פָּחוּת של יכולות החיפוש לחקור את התפוקה.

קָשׁוּר: כיצד להשתמש פחות הפיקוד על לינוקס

הוספת חותמות זמן

אתה יכול להוסיף מספר חותמות זמן שונה לתפוקה. ה --R (חותם זמן יחסית) אפשרות מוסיפה חותמות זמן המציגים את פרש הזמן בין התחילה כול שיחת מערכת רצופה. שים לב שהערכים זמן אלה יכללו את משך הזמן לשיחה וכל דבר המערכת הקודמת אחר שהתוכנית עושה לפני קריאת המערכת הבאה.

 strace -r ./stex

חותמות הזמן מוצגים בתחילת כל שורה של הפלט.

כדי לראות את כמות הזמן המושקע בכל שיחת המערכת, להשתמש - אפשרות (syscall-פי). זה מראה את משך הזמן המושקע בתוך כל שיחה המערכת.

 strace -T ./stex

משכי זמן מוצגים בסוף כל שורה קריאת המערכת.

כדי לראות את השעה שבה כל שיחה המערכת נקראה, להשתמש -tt אפשרות (חותמות זמן מוחלט). זה מראה את הזמן "שעון קיר", עם רזולוציה מיקרו.

 strace -tt ./stex

הזמנים מוצגים בתחילת כל שורה.

איתור תהליך רץ

אם התהליך שאתה רוצה עקבות כבר פועל, אתה עדיין יכול לצרף סטריאו אליו. כדי לעשות זאת, אתה צריך לדעת את זהות התהליך. אתה יכול להשתמש נ.ב עם grep כדי למצוא את זה. יש לנו להפעיל את Firefox. כדי לברר את הזהות של Firefox תהליך, אנו יכולים להשתמש נ.ב ו צינור זה באמצעות grep .

 ps -e | grep Firefox 

אנו יכולים לראות כי מזהים התהליך 8483. אנו נשתמש - (תהליך הזיהוי) אפשרות לספר סטריאו אשר לעבד לצרף. שים לב, אתה תצטרך להשתמש סודו -

 sudo strace -p 8483 

תראה הודעה המציינת כי סטריאו והיא נקשרה התהליך, ולאחר מכן את שיחות עקבות מערכת יוצג בחלון הטרמינל כרגיל.

יצירת דוח

ה -c (רק סיכום) הגורמים אופציה סטריאו כדי להדפיס דוח. זה יוצר טבלה עבור מידע על השיחות במערכת שבוצעו על ידי תוכנית לייחס.

 strace -c ./stex

העמודות הן:

  • זמן% : אחוז זמן הביצוע שהושקע בכל שיחת מערכת.
  • שניות : הזמן הכולל לידי ביטוי בשניות ומיקרו שניות בילה בכל שיחת מערכת.
  • USECS / CALL. : הזמן הממוצע ב microseconds בילה בכל שיחת מערכת.
  • שיחות : מספר הפעמים שכל שיחת מערכת הוצעה.
  • שגיאות : מספר הכישלונות עבור כל שיחת מערכת.
  • syscall : שם שיחת המערכת.

ערכים אלה יראו אפסים לתוכניות טריוויאליות שמבצעות ומסתיימות במהירות. ערכי העולם האמיתי מוצגים עבור תוכניות שעושות משהו משמעותי יותר מאשר יישום ההפגנה שלנו.

תובנות עמוקות, בקלות

ה סטריאו פלט יכול להראות לך איזו שיחות מערכת נעשות, אילו מהם נעשים שוב ושוב, וכמה זמן ביצוע הוא להיות בילה בקוד בצד הקרנל. זה מידע נהדר. לעתים קרובות, כאשר אתה מנסה להבין מה קורה בתוך הקוד שלך, קל לשכוח כי הבינארי שלך הוא אינטראקציה כמעט ללא הפסקה עם הקרנל לבצע רבות של פונקציות שלה.

על ידי שימוש ב סטריאו , אתה רואה את התמונה המלאה.


לינוקס - המאמרים הפופולריים ביותר

כיצד תהליכים להרוג זומבי על לינוקס

לינוקס Nov 25, 2024

Fatmawati אחמד Zaenuri / Shutterstock תוכנית שנכתבו גרוע או ביצוע גרוע יכול לעזוב תהליכי זומבי א..


הפצות לינוקס הטוב ביותר ללא מערכת

לינוקס Feb 24, 2025

BMJ / Shutterstock.com. כאשר הפצות לינוקס הדומיננטי אימצו סיסטור , מתנגדים הפצות והתחילו פר�..


מה חדש ב- Ubuntu 21.04 "היפו ושעיר"

לינוקס Apr 22, 2025

שחרור חדש של אובונטו 21.04. , Hirsute Hippo, שוחרר ב -22 באפריל 2021. זוהי שחרור ביניים של הפצה של לינוקס הפופו�..


כיצד להשתמש fsck פיקוד על לינוקס

לינוקס Aug 18, 2025

Pixza Studio / Shutterstock כל הנתונים החשובים שלנו יושבים במערכת קבצים מסוג אחד או אחר, בעיות מערכת..


מה חדש בפדורה 35

לינוקס Nov 2, 2024

פדורה 35, כובע אדום "S חינם חלוקת לינוקס (הפצה), שוחרר ב -2 בנובמבר, 2021. מתוך חוויה שולחני מעודכנ�..


איך לכבות מחשב אובונטו

לינוקס Oct 12, 2025

בדומה לכל המחשבים האישיים, מחשב פועל אובונטו מערכת ההפעלה השולחנית חייב להיות כבוי פעם. כיבוי אוב..


כיצד להוריד ולהתקין Steam על לינוקס

לינוקס Oct 9, 2025

סטודיו פוסט-מודרני / shutterstock.com אז, אתה רוצה לנסות משחקים על לינוקס ? במאמר זה, נתאר נ..


האם אתה יכול להתקין לינוקס על M1 Apple סיליקון Mac?

לינוקס Nov 12, 2024

לא כל אחד קונה מק ל MacOS לרוץ אך ורק. החדשות הרעות הן כי החל מנובמבר 2021, תמיכת Linux מקומית על אפל הסיליקון ה�..


קטגוריות