الجمعة, أكتوبر 15, 2021
الرئيسيةتكنولوجياكيفية استخدام strace لمراقبة مكالمات نظام Linux

كيفية استخدام strace لمراقبة مكالمات نظام Linux

تطلب برامج Linux من kernel القيام ببعض الأشياء من أجلها. ال strace يكشف الأمر عن استدعاءات النظام هذه. يمكنك استخدامها لفهم كيفية عمل البرامج ولماذا ، في بعض الأحيان ، لا يفعلون.

مكالمات Kernel والنظام

بقدر ما تكون ذكية ، لا تستطيع برامج الكمبيوتر أن تفعل كل شيء لنفسها. إنهم بحاجة إلى تقديم طلبات لأداء وظائف معينة لهم. تذهب هذه الطلبات إلى Linux kernel. عادة ، هناك مكتبة أو واجهة برمجية أخرى يستدعيها البرنامج ، ثم تقدم المكتبة الطلب المناسب – يسمى استدعاء النظام – إلى النواة.

يمكن أن تساعدك القدرة على رؤية مكالمات النظام التي قام بها البرنامج وما هي الردود على فهم الأعمال الداخلية للبرامج التي تهمك أو التي كتبتها. هذا هو ماذا او ما strace يفعل. يمكن أن يساعد في استكشاف المشكلات وإصلاحها والبحث عن الاختناقات.

هذا ليس هو نفسه تصحيح التطبيق بأداة مثل gdb . يتيح لك برنامج تصحيح الأخطاء التحقيق في العملية الداخلية للبرنامج أثناء تشغيله. يتيح لك التنقل عبر منطق برنامجك وفحص الذاكرة والقيم المتغيرة. بالمقارنة ، ماذا strace هل هو التقاط معلومات استدعاء النظام أثناء تشغيل البرنامج. عندما ينتهي البرنامج المتعقب ، strace يسرد معلومات مكالمات النظام إلى نافذة المحطة الطرفية.

توفر مكالمات النظام جميع أنواع الوظائف منخفضة المستوى ، مثل إجراءات القراءة والكتابة على الملفات وعمليات القتل وما إلى ذلك. هناك قائمة بمئات مكالمات النظام على صفحة دليل syscalls.

تثبيت الدعامة

إذا strace لم يتم تثبيته بالفعل على جهاز الكمبيوتر الخاص بك ، يمكنك تثبيته بسهولة بالغة.

في Ubuntu ، استخدم هذا الأمر:

sudo apt install strace

1

في Fedora ، اكتب هذا الأمر:

sudo dnf install strace

3

في Manjaro ، الأمر هو:

sudo pacman -Sy strace

2

الخطوات الأولى مع دعامة

سنستخدم برنامجًا صغيرًا للتوضيح strace. لا يفعل الكثير: يفتح ملفًا ويكتب سطرًا من النص إليه ، ولا يحتوي على أي خطأ في التحقق منه. إنه مجرد اختراق سريع حتى نتمكن من استخدام شيء ما strace.

#include <stdio.h>

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

  // file handle 
  FILE *fileGeek;

  // open a file called "strace_demo.txt", or create it 
  fileGeek = fopen("strace_demo.txt", "w");

  // write some text to the file 
  fprintf(fileGeek, "Write this to the file" );

  // close the file 
  fclose(fileGeek);

  // exit from program 
  return (0); 

} // end of main

لقد حفظنا هذا في ملف يسمى “file-io.c” وقمنا بتجميعه مع gcc في ملف تنفيذي يسمى stex، اسمه ل “شارعالعنصر السابقوافرة. ”

gcc -o stex file-io.c

سوف نتصل strace من سطر الأوامر وتمرير اسم الملف التنفيذي الجديد الخاص بنا إليه باعتباره العملية التي نريد تتبعها. يمكننا بسهولة تتبع أي من أوامر Linux أو أي برنامج ثنائي آخر قابل للتنفيذ. نحن نستخدم برنامجنا الصغير لسببين.

السبب الأول هو ذلك strace مطول. يمكن أن يكون هناك الكثير من الإخراج. هذا رائع عندما تستخدم strace في حالة الغضب ، ولكن يمكن أن تكون ساحقة في البداية. هناك محدودة strace الإخراج لبرنامجنا الصغير. السبب الثاني هو أن برنامجنا له وظائف محدودة ، وشفرة المصدر قصيرة ومباشرة. هذا يجعل من السهل تحديد أقسام الإخراج التي تشير إلى الأجزاء المختلفة من العمل الداخلي للبرنامج.

strace ./stex

4

يمكننا أن نرى بوضوح write استدعاء النظام لإرسال النص “اكتب هذا إلى الملف” إلى ملفنا المفتوح و exit_group استدعاء النظام. يؤدي هذا إلى إنهاء جميع مؤشرات الترابط في التطبيق وإرسال قيمة إرجاع مرة أخرى إلى shell.

4.1

تصفية الإخراج

حتى مع برنامج العرض التوضيحي البسيط لدينا ، هناك الكثير من المخرجات. يمكننا استخدام -e (التعبير) الخيار. سنقوم بتمرير اسم استدعاء النظام الذي نريد رؤيته.

strace -e write ./stex

5

يمكنك الإبلاغ عن مكالمات النظام المتعددة عن طريق إضافتها في شكل قائمة مفصولة بفواصل. لا تقم بتضمين أي مسافة بيضاء في قائمة مكالمات النظام.

strace -e close,write ./stex

6

إرسال الإخراج إلى ملف

فائدة تصفية المخرجات هي أيضًا مشكلة تصفية الإخراج. ترى ما طلبت رؤيته ، لكنك لا ترى أي شيء آخر. وقد تكون بعض هذه المخرجات الأخرى مفيدة لك أكثر من الأشياء التي طلبت رؤيتها.

في بعض الأحيان ، يكون من الأنسب التقاط كل شيء والبحث والتمرير عبر مجموعة النتائج بأكملها. بهذه الطريقة ، لن تستبعد عن طريق الخطأ أي شيء مهم. ال -o (الإخراج) يتيح لك الخيار إرسال الإخراج من ملف strace جلسة إلى ملف نصي.

strace -o trace-output.txt ./stex

7

يمكنك بعد ذلك استخدام ملف less أمر للتمرير خلال القائمة والبحث عن مكالمات النظام – أو أي شيء آخر – بالاسم.

less trace-output.txt

8

يمكنك الآن استخدام كل من lessقدرات البحث للتحقيق في الإخراج.

9

ذات صلة: كيفية استخدام أقل الأوامر على لينكس

إضافة الطوابع الزمنية

يمكنك إضافة عدة طوابع زمنية مختلفة إلى الإخراج. ال -r (الطوابع الزمنية النسبية) يضيف طوابع زمنية تعرض فرق الوقت بين بداية كل مكالمة نظام متتالية. لاحظ أن قيم الوقت هذه ستتضمن الوقت المستغرق في مكالمة النظام السابقة وأي شيء آخر كان يفعله البرنامج قبل مكالمة النظام التالية.

strace -r ./stex

10

يتم عرض الطوابع الزمنية في بداية كل سطر من الإخراج.

11

لمعرفة مقدار الوقت المستغرق في كل مكالمة نظام ، استخدم ملف -T (مرات syscall) الخيار. يوضح هذا المدة الزمنية المستغرقة داخل كل مكالمة نظام.

strace -T ./stex

12

يتم عرض المدد الزمنية في نهاية كل خط استدعاء للنظام.

13

لمعرفة الوقت الذي تم فيه استدعاء كل مكالمة نظام ، استخدم ملف -tt (طوابع زمنية مطلقة). يعرض هذا وقت “ساعة الحائط” بدقة ميكرو ثانية.

strace -tt ./stex

14

يتم عرض الأوقات في بداية كل سطر.

15

تتبع عملية جارية

إذا كانت العملية التي تريد تتبعها قيد التشغيل بالفعل ، فلا يزال بإمكانك إرفاقها strace إليها. للقيام بذلك ، تحتاج إلى معرفة معرف العملية. يمكنك استخدام ps مع grep للعثور على هذا. لدينا Firefox قيد التشغيل. لمعرفة معرف firefox العملية ، يمكننا استخدامها ps وتمريرها من خلال grep.

ps -e | grep firefox

16

يمكننا أن نرى أن معرف العملية هو 8483. سنستخدم -p (معرف العملية) خيار لمعرفة strace أي عملية نعلق عليها. لاحظ أنك ستحتاج إلى استخدام ملفات sudo :

sudo strace -p 8483

17

سترى إشعارًا بأن strace قام بإرفاق نفسه بالعملية ، وبعد ذلك سيتم عرض مكالمات تتبع النظام في نافذة المحطة الطرفية كالمعتاد.

18

إنشاء تقرير

ال -c (ملخص فقط) أسباب الخيار strace لطباعة تقرير. يقوم بإنشاء جدول للحصول على معلومات حول مكالمات النظام التي تم إجراؤها بواسطة البرنامج المتعقب.

strace -c ./stex

19

الأعمدة هي:

  • ٪ زمن: النسبة المئوية لوقت التنفيذ الذي تم قضاؤه في كل استدعاء للنظام.
  • ثواني: إجمالي الوقت المُعبر عنه بالثواني والميكروثانية المنقضي في كل مكالمة نظام.
  • usecs / دعوة: متوسط ​​الوقت بالميكروثانية الذي يقضيه في كل مكالمة نظام.
  • المكالمات: عدد المرات التي تم فيها تنفيذ كل استدعاء للنظام.
  • أخطاء: عدد حالات الفشل لكل مكالمة نظام.
  • syscall: اسم استدعاء النظام.

ستعرض هذه القيم أصفارًا للبرامج التافهة التي يتم تنفيذها وتنتهي بسرعة. يتم عرض قيم العالم الحقيقي للبرامج التي تقوم بشيء أكثر أهمية من تطبيق العرض التوضيحي الخاص بنا.

رؤى عميقة ، بسهولة

ال strace يمكن أن يوضح لك الإخراج استدعاءات النظام التي يتم إجراؤها ، وأي منها يتم إجراؤه بشكل متكرر ، ومقدار وقت التنفيذ الذي يتم قضاؤه داخل كود جانب النواة. هذه معلومات رائعة. في كثير من الأحيان ، عندما تحاول فهم ما يحدث داخل الكود الخاص بك ، فمن السهل أن تنسى أن نظامك الثنائي يتفاعل تقريبًا بلا توقف مع النواة لأداء العديد من وظائفها.

باستخدام strace، ترى الصورة كاملة.

المصدر

RELATED ARTICLES

ترك الرد

من فضلك ادخل تعليقك
من فضلك ادخل اسمك هنا

Most Popular

Recent Comments