.\" -*- coding: UTF-8 -*- .\" Copyright 2014, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sprof 1 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم sprof \- قراءة وعرض بيانات التنميط للكائنات المشتركة .SH موجز .SY sprof [\fIoption\fP\ .\|.\|.\&] \fIshared\-object\-path\fP [\fIprofile\-data\-path\fP] .YS .SH الوصف يعرض أمر \fBsprof\fP ملخص تنميط للكائن المشترك (المكتبة المشتركة) المحدد كوسيط سطر أوامر أول. يُنشأ ملخص التنميط باستخدام بيانات تنميط مولدة سابقًا في الوسيط الثاني (الاختياري) لسطر الأوامر. إذا حُذف مسار بيانات التنميط، يحاول \fBsprof\fP استنتاجه باستخدام اسم الصدى للكائن المشترك، باحثًا عن ملف باسم \fI<اسم\-الصدى>.profile\fP في الدليل الحالي. .SH الخيارات تحدد خيارات سطر الأوامر التالية مخرجات التنميط المراد إنتاجها: .TP \fB\-\-call\-pairs\fP .TQ \fB\-c\fP اطبع قائمة بأزواج مسارات الاستدعاء للواجهات المصدرة بواسطة الكائن المشترك، مع عدد مرات استخدام كل مسار. .TP \fB\-\-flat\-profile\fP .TQ \fB\-p\fP وَلّد تنميطًا مسطحًا لجميع الدوال في الكائن المراقب، مع العدادات والنقرات. .TP \fB\-\-graph\fP .TQ \fB\-q\fP وَلّد رسمًا بيانيًا للاستدعاءات. .P إذا لم يُحدد أي من الخيارات أعلاه، يكون السلوك المبدئي عرض تنميط مسطح ورسم بياني للاستدعاءات. .P تتوفر خيارات سطر أوامر إضافية التالية: .TP \fB\-\-help\fP .TQ \fB\-?\fP اعرض ملخصاً لخيارات ومعاملات سطر الأوامر ثم اخرج. .TP \fB\-\-usage\fP اعرض رسالة استخدام قصيرة واخرج. .TP \fB\-\-version\fP .TQ \fB\-V\fP اعرض إصدار البرنامج واخرج. .SH المعايير GNU. .SH أمثلة يوضح المثال التالي استخدام \fBsprof\fP. يتكون المثال من برنامج رئيس يستدعي دالتين في كائن مشترك. أولاً، كود البرنامج الرئيس: .P .in +4n .EX $\fB cat prog.c\fP; #include \& void x1(void); void x2(void); \& int main(int argc, char *argv[]) { x1(); x2(); exit(EXIT_SUCCESS); } .EE .in .P تُعرف الدالتان \fIx1\fP() و \fIx2\fP() في ملف المصدر التالي المستخدم لبناء الكائن المشترك: .P .in +4n .EX $\fB cat libdemo.c\fP; #include \& void consumeCpu1(int lim) { for (unsigned int j = 0; j < lim; j++) getppid(); } \& void x1(void) { for (unsigned int j = 0; j < 100; j++) consumeCpu1(200000); } \& void consumeCpu2(int lim) { for (unsigned int j = 0; j < lim; j++) getppid(); } \& void x2(void) { for (unsigned int j = 0; j < 1000; j++) consumeCpu2(10000); } .EE .in .P الآن نبني الكائن المشترك بالاسم الحقيقي \fIlibdemo.so.1.0.1\fP، واسم الصدى \fIlibdemo.so.1\fP: .P .in +4n .EX $\fB cc \-g \-fPIC \-shared \-Wl,\-soname,libdemo.so.1 \[rs]\fP \fB \-o libdemo.so.1.0.1 libdemo.c\fP; .EE .in .P ثم نبني روابط رمزية لاسم الصدى للمكتبة واسم رابط المكتبة: .P .in +4n .EX $\fB ln \-sf libdemo.so.1.0.1 libdemo.so.1\fP; $\fB ln \-sf libdemo.so.1 libdemo.so\fP; .EE .in .P بعد ذلك، نُجمّع البرنامج الرئيس، رابطًا إياه مع الكائن المشترك، ثم نسرد التبعيات الديناميكية للبرنامج: .P .in +4n .EX $\fB cc \-g \-o prog prog.c \-L.\& \-ldemo\fP; $\fB ldd prog\fP; linux\-vdso.so.1 => (0x00007fff86d66000) libdemo.so.1 => not found libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000) /lib64/ld\-linux\-x86\-64.so.2 (0x00007fd4dc51f000) .EE .in .P للحصول على معلومات التنميط للكائن المشترك، نُعرِّف متغير البيئة \fBLD_PROFILE\fP باسم الصدى للمكتبة: .P .in +4n .EX $\fB export LD_PROFILE=libdemo.so.1\fP; .EE .in .P ثم نُعرِّف متغير البيئة \fBLD_PROFILE_OUTPUT\fP بمسار الدليل حيث يجب كتابة مخرجات التنميط، وننشئ ذلك الدليل إذا لم يكن موجودًا بالفعل: .P .in +4n .EX $\fB export LD_PROFILE_OUTPUT=$(pwd)/prof_data\fP; $\fB mkdir \-p $LD_PROFILE_OUTPUT\fP; .EE .in .P يتسبب \fBLD_PROFILE\fP في \fIإلحاق\fP مخرجات التنميط بملف المخرجات إذا كان موجودًا بالفعل، لذا نضمن عدم وجود بيانات تنميط سابقة: .P .in +4n .EX $\fB rm \-f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile\fP; .EE .in .P ثم نشغل البرنامج لإنتاج مخرجات التنميط، التي تُكتب إلى ملف في الدليل المحدد في \fBLD_PROFILE_OUTPUT\fP: .P .in +4n .EX $\fB LD_LIBRARY_PATH=.\& ./prog\fP; $\fB ls prof_data\fP; libdemo.so.1.profile .EE .in .P ثم نستخدم الخيار \fBsprof \-p\fP لتوليد تشكيلة مسطحة مع العد والنقرات: .P .in +4n .EX $\fB sprof \-p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP; Flat profile: \& Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls us/call us/call name 60.00 0.06 0.06 100 600.00 consumeCpu1 40.00 0.10 0.04 1000 40.00 consumeCpu2 0.00 0.10 0.00 1 0.00 x1 0.00 0.10 0.00 1 0.00 x2 .EE .in .P الخيار \fBsprof \-q\fP يولد رسم بياني للاستدعاءات: .P .in +4n .EX $\fB sprof \-q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP; \& index % time self children called name \& 0.00 0.00 100/100 x1 [1] [0] 100.0 0.00 0.00 100 consumeCpu1 [0] \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- 0.00 0.00 1/1 [1] 0.0 0.00 0.00 1 x1 [1] 0.00 0.00 100/100 consumeCpu1 [0] \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- 0.00 0.00 1000/1000 x2 [3] [2] 0.0 0.00 0.00 1000 consumeCpu2 [2] \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- 0.00 0.00 1/1 [3] 0.0 0.00 0.00 1 x2 [3] 0.00 0.00 1000/1000 consumeCpu2 [2] \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .EE .in .P أعلاه وأسفل، السلاسل "" تمثل معرفات خارج الكائن المُشكّل (في هذا المثال، هذه حالات من \fImain()\fP). .P الخيار \fBsprof \-c\fP يولد قائمة بأزواج الاستدعاءات وعدد مرات حدوثها: .P .in +4n .EX $\fB sprof \-c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP; x1 1 x1 consumeCpu1 100 x2 1 x2 consumeCpu2 1000 .EE .in .SH "انظر أيضًا" \fBgprof\fP(1), \fBldd\fP(1), \fBld.so\fP(8) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .