مخطط استدعاء
المحتويات
- برامج مجانية لإنشاء مخطط استدعاء الدوال
- المفاهيم الأساسية
- أدوات إنشاء مخططات استدعاء الدوال الثابتة
- ---------------------- | 1507/1507 cg_assemble [38]
- 2/1510 arc_add [31] |----------------------
- نموذج لمخطط استدعاء دوال
- 72384/72384 sym_id_parse [54] | 1508/1508 cg_dfn [15]
- الاستخدامات
- 24/1537 parse_spec [19] | 1508/1508 pre_visit [13]
- ---------------------- – ----------------------
- برامج توليد مخطط استدعاء الدوال أثناء التشغيل
- 1509/1509 cg_dfn [15] | 24/24 sym_id_parse [54]
- 1508/1508 propagate_flags [52] |----------------------
- 6032/9052 propagate_flags [52] |----------------------
- 4/9052 cg_tally [32] | 1508/1508 cg_assemble [38]

قبل الخوض في التفاصيل، مخطط استدعاء (ويُعرف كذلك باسم مخطط الاستدعاءات المتعدد) هو مخطط تدفق تحكم يمثل علاقات الاستدعاء بين الإجراءات الفرعية في البرنامج الحاسوبي. تمثل كل عقدة إجراءً، ويشير كل ضلع إلى أن الإجراء (أ) يستدعي الإجراء (ب). وبالتالي، تشير الدورة في المخطط إلى استدعاءات الإجراءات المتكررة. ونتناول فيما يلي مزيدًا من التفاصيل.
برامج مجانية لإنشاء مخطط استدعاء الدوال
وفي هذا السياق، توجد الكثير من البرامج المجانية التي يُمكن استخدامها لتوليد مخططات استدعاء الدوال، والتي يُمكن تقسيمها بشكل عام إلى عدة فئات رئيسية على النحو التالي:
المفاهيم الأساسية
علاوةً على ذلك، يمكن أن تكون مخططات الاستدعاء حركية أو ثابتة. يُمثل مخطط الاستدعاء الحركي سجلًا لتنفيذ البرنامج، كما هو موضح في مخرجات محلل الأداء. وبالتالي، فإن مخطط الاستدعاء الحركي قد يكون دقيقًا، ولكنه يصف تشغيلًا واحدًا فقط للبرنامج. أما مخطط الاستدعاء الثابت فهو مخطط مصمم لتمثيل جميع عمليات تشغيل البرنامج الممكنة، ويُعدّ مخطط الاستدعاء الثابت الدقيق مسألة غير قابلة للقرار، لذا فإن خوارزميات مخطط الاستدعاء الثابت تُعتبر عمومًا تقريبات زائدة. أي أن كل علاقة استدعاء تحدث تكون ممثلة في المخطط، وربما كذلك بعض علاقات الاستدعاء التي لن تحدث أبدًا في عمليات التشغيل الفعلية للبرنامج.
وفي هذا السياق، في لغات البرمجة التي تدعم الإرسال الديناميكي (مثل لغة جافا ولغة سي ++), أو الدوال من الدرجة الأولى (مثل لغة بايثون أو لغة راكيت)، أو مؤشرات الدوال (مثل لغة سي)، يتطلب حساب مخطط استدعاءات ثابت بدقة نتائج تحليل الأسماء المستعارة. على حين يتطلب حساب الأسماء المستعارة بدقة مخطط استدعاءات، وتحل الكثير من أنظمة التحليل الثابت مشكلة التكرار اللانهائي هذه بأن تقوم بحساب كليهما في آن واحد.
كذلك، يمكن كذلك تعريف مخططات الاستدعاء باعتبارها تُمثّل درجات متفاوتة من الدقة، حيث يُقارب مخطط الاستدعاء الأكثر دقة سلوك البرنامج الحقيقي بدقة أكبر، على حساب زيادة وقت الحساب واستهلاك الذاكرة. يتميز مخطط الاستدعاء الأكثر دقة بحساسيته الكاملة للسياق، مما يعني أن المخطط يحتوي عند كُل إجراء على عقدة منفصلة لكل مكدس استدعاء يمكن تفعيل هذا الإجراء من خلاله. يُطلق على مخطط استدعاءات الدوال الحساس للسياق اسم شجرة سياق الاستدعاءات، والتي يُمكن حسابها ديناميكيًا بسهولة، على الرغم من أنها قد تستهلك قدرًا كبيرًا من الذاكرة. لا تُحسب أشجار سياق الاستدعاءات عادةً بشكل ثابت، نظرًا لأن ذلك سوف يستغرق وقتًا طويلاً جدًا بالنسبة للبرامج الكبيرة. أما مخططات الاستدعاءات الأقل دقة فتكون غير حساسة للسياق، وهو ما يعني احتواء المخطط على عقدة واحدة فقط لكل إجراء.
أدوات إنشاء مخططات استدعاء الدوال الثابتة
وفي هذا السياق، أداة كولي، وهي أداة تستعمل ملفات لغة نقل السجلات الخاصة ببرمجية جي سي سي لإنشاء مخططات استدعاء الدوال المُستدعية أو المُستدعاة للمشاريع المكتوبة بلغة سي.
علاوةً على ذلك، أداة أناليزو، وهي أداة تحسب مقاييس النص البرمجي المصدري، وتُنشئ مخططات التبعية.
علاوةً على ذلك، أداة تي سي تري، وهي عبارة عن ملف تنفيذي يربط بين برمجيات سي سكوب وغرافيز.
وفي هذا السياق، تقوم هذة المجموعة من الأدوات بإنشاء مخططات استدعاء الدوال الثابتة للبرامج المكتوبة بلغات سي وسي ++ دون الحاجة لتشغيل التطبيقات، ومن أمثلة هذه الأدوات:
علاوةً على ذلك، أداة سورس تريل، وهي أداة ثابتة لإنشاء مخططات استدعاء الدوال يمكن للمستعمل استكشافها ديناميكيًا، كما تدعم هذه الأداة كذلك لغات جافا وبايثون.
من جانب آخر، أداة سي سي تري، وهي أداة إضافية مضمنة في برنامج فيم الأصلي تُستعمل لعرض مخططات استدعاء الدوال الثابتة من خلال قراءة قاعدة بيانات سي سكوب، وتدعم البرامج المكتوبة بلغة سي.
من جانب آخر، أداة دوكسيجين، وهي أداة تستعمل برمجية غرافيز لإنشاء مخططات الاستدعاء الثابتة.
علاوةً على ذلك، أداة سي فلو، وهي برمجية قادرة على إنشاء مخطط استدعاء الدوال المباشر والمعكوس للبرامج المكتوبة بلغة سي.
من جانب آخر، أداة كودفيز، وهي عبارة عن مُولِّد لمخططات استدعاء الدوال الثابتة بحيث لا يتطلب تشغيل البرنامج. أضيفت هذه الأداة كتعديل لبرنامج جي سي سي، وهي تدعم البرامج المكتوبة بلغات سي وسي++.
من جانب آخر، أداة إيجيبت، وهي عبارة عن برنامج نصي صغير مكتوب بلغة بيرل، ويستعمل برمجيات غرافيز وجي سي سي لإنشاء مخططات استدعاء الدوال الثابتة للبرامج المكتوبة بلغة سي.
كذلك، كول تري دوت إس إتش، وهي أداة تستعمل دوال باش شيل، وتربط بين كل من أداة سي سكوب وبرمجية غرافيز مع مجموعة من أدوات عرض النقاط لعرض علاقات المُستدعي و المُستدعى أعلى وأسفل و/أو بين دوال سي التي تحددها.
---------------------- | 1507/1507 cg_assemble [38]
- 5766/5766 core_create_function_syms [41]|[15] 1507+2 cg_dfn [15]
- [5] 5766 core_sym_class [5] | 1509/1509 is_numbered [9]
- ---------------------- | 1508/1508 is_busy [11]
2/1510 arc_add [31] |----------------------
- 1508/1510 cg_assemble [38] | 1430/1430 core_create_function_syms [41]
- [8] 1510 arc_lookup [8] |[17] 1430 source_file_lookup_path [17]
- ---------------------- – ----------------------
نموذج لمخطط استدعاء دوال
علاوةً على ذلك، يمثل النص البرمجي التالي نموذجًا لمخطط استدعاء دوال أنشئ باستخدام برنامج جي بروف أثناء التحليل الذاتي له:index called name index called name
72384/72384 sym_id_parse [54] | 1508/1508 cg_dfn [15]
[3] 72384 match [3] |[13] 1508 pre_visit [13]
---------------------- – ----------------------
الاستخدامات
البرامج
ومن جهة أخرى، يمكن استخدام مخططات استدعاء الدوال في تطبيقات مختلفة. ويتمثل أحد التطبيقات البسيطة لها في تحديد الإجراءات التي لا يتم استدعائها مطلقًا. كما يمكن استخدام مخططات استدعاء الدوال كوثائق تُسهّل على المستعملين فهم البرامج، ويمكن استخدامها كذلك للكشف عن أي خلل في تنفيذ البرنامج أو للكشف عن هجمات حقن التعليمات البرمجية.
24/1537 parse_spec [19] | 1508/1508 pre_visit [13]
من جهة ثانية، 1513/1537 core_create_function_syms [41]| 1508/1508 post_visit [12]
[6] 1537 sym_init [6] | 2 cg_dfn [15]
---------------------- – ----------------------
- 1511/1511 core_create_function_syms [41]| 1505/1505 hist_print [49]
- [7] 1511 get_src_info [7] |[16] 1505 print_line [16]
- ---------------------- | 2/9 print_name_only [25]
برامج توليد مخطط استدعاء الدوال أثناء التشغيل
من جهة ثانية، تكون برامج إنشاء مخطط استدعاء الدوال أثناء التشغيل في أغلب الأحيان عبارة عن أدوات تحليل أداء مزودة بوظيفة إضافية لإنشاء مخططات استدعاء الدوال، ومن أمثلة هذه الأدوات:
أداة كولغريند، وتكون جزءً من أداة فالغريند.
من جهة ثانية، واجهة برمجة تطبيقات سينغل إيفنت، وهي أداة مجانية ومفتوحة المصدر من شركة إنتل.
من جانب آخر، أداة جي بروف، وتكون مُضمّنة في توزيعة برمجيات بيركلي أو جزءً من برامج جنو بينوتيلز.
ومن ناحية أخرى، مراقب النشاط في نظام ماك أو إس إكس، حيث يحتوي مراقب النشاط في واجهة المستعمل الرسومية من أبل على مُولّد مُدمج لمخططات استدعاء الدوال، والذي يُمكنه أخذ عينات من العمليات وإرجاع مخطط استدعاء الدوال، إلا أن هذه الوظيفة مُتاحة فقط في نظام ماك أو إس إكس ليوبارد.
من جانب آخر، ميك بي بي غراف، وهو مولد مخططات استدعاء دوال على مستوى الوحدة مخصص لعمليات البناء التي تتم باستخدام برنامج ميك بي بي.
من جانب آخر، بي بروف، وهي أداة مفتوحة المصدر لعرض وتحليل بيانات الملفات التعريفية، وتُستعمل بالتزامن مع حزمة أدوات جي بيرف.
إضافةً إلى ذلك، أوبن بات، وهو برنامج يتضمن أداة كونترول فلو التي تُنشئ تلقائيًا مخطط استدعاء الدوال باستخدام برمجية غرافيز استنادًا إلى قياسات وقت التشغيل.
في هذا الإطار، كود أناليست، وهي أداة طورتها شركة أيه إم دي مرخصة بموجب رخصة جنو العمومية.
وعلى صعيد آخر، أداة كي كاشغريند، وهي أداة قوية لإنشاء وتحليل مخططات استدعاء الدوال بناءً على البيانات المولدة باستخدام برنامج كولغريند.
1509/1509 cg_dfn [15] | 24/24 sym_id_parse [54]
[9] 1509 is_numbered [9] |[18] 24 parse_id [18]
---------------------- | 24/24 parse_spec [19]
1508/1508 propagate_flags [52] |----------------------
- [10] 1508 inherit_flags [10] | 24/24 parse_id [18]
- ---------------------- |[19] 24 parse_spec [19]
- 1508/1508 cg_dfn [15] | 24/1537 sym_init [6]
- [11] 1508 is_busy [11] |----------------------
- ---------------------- | 24/24 main [1210]
- 1508/1508 cg_dfn [15] |[20] 24 sym_id_add [20]
- [12] 1508 post_visit [12] |
6032/9052 propagate_flags [52] |----------------------
[4] 9052 sym_lookup [4] | 2 cg_dfn [15]
4/9052 cg_tally [32] | 1508/1508 cg_assemble [38]
3016/9052 hist_print [49] |[14] 1508 propagate_time [14]
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟