| sprof(1) | General Commands Manual | sprof(1) |
الاسم¶
sprof - قراءة وعرض بيانات التنميط للكائنات المشتركة
موجز¶
sprof |
[option ...] shared-object-path [profile-data-path] |
الوصف¶
يعرض أمر sprof ملخص تنميط للكائن المشترك (المكتبة المشتركة) المحدد كوسيط سطر أوامر أول. يُنشأ ملخص التنميط باستخدام بيانات تنميط مولدة سابقًا في الوسيط الثاني (الاختياري) لسطر الأوامر. إذا حُذف مسار بيانات التنميط، يحاول sprof استنتاجه باستخدام اسم الصدى للكائن المشترك، باحثًا عن ملف باسم <اسم-الصدى>.profile في الدليل الحالي.
الخيارات¶
تحدد خيارات سطر الأوامر التالية مخرجات التنميط المراد إنتاجها:
- --call-pairs
- -c
- اطبع قائمة بأزواج مسارات الاستدعاء للواجهات المصدرة بواسطة الكائن المشترك، مع عدد مرات استخدام كل مسار.
- --flat-profile
- -p
- وَلّد تنميطًا مسطحًا لجميع الدوال في الكائن المراقب، مع العدادات والنقرات.
- --graph
- -q
- وَلّد رسمًا بيانيًا للاستدعاءات.
إذا لم يُحدد أي من الخيارات أعلاه، يكون السلوك المبدئي عرض تنميط مسطح ورسم بياني للاستدعاءات.
تتوفر خيارات سطر أوامر إضافية التالية:
المعايير¶
GNU.
أمثلة¶
يوضح المثال التالي استخدام sprof. يتكون المثال من برنامج رئيس يستدعي دالتين في كائن مشترك. أولاً، كود البرنامج الرئيس:
$ cat prog.c;
#include <stdlib.h>
void x1(void);
void x2(void);
int
main(int argc, char *argv[])
{
x1();
x2();
exit(EXIT_SUCCESS);
}
تُعرف الدالتان x1() و x2() في ملف المصدر التالي المستخدم لبناء الكائن المشترك:
$ cat libdemo.c;
#include <unistd.h>
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);
}
الآن نبني الكائن المشترك بالاسم الحقيقي libdemo.so.1.0.1، واسم الصدى libdemo.so.1:
$ cc -g -fPIC -shared -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c;
ثم نبني روابط رمزية لاسم الصدى للمكتبة واسم رابط المكتبة:
$ ln -sf libdemo.so.1.0.1 libdemo.so.1; $ ln -sf libdemo.so.1 libdemo.so;
بعد ذلك، نُجمّع البرنامج الرئيس، رابطًا إياه مع الكائن المشترك، ثم نسرد التبعيات الديناميكية للبرنامج:
$ cc -g -o prog prog.c -L. -ldemo; $ ldd prog; 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)
للحصول على معلومات التنميط للكائن المشترك، نُعرِّف متغير البيئة LD_PROFILE باسم الصدى للمكتبة:
$ export LD_PROFILE=libdemo.so.1;
ثم نُعرِّف متغير البيئة LD_PROFILE_OUTPUT بمسار الدليل حيث يجب كتابة مخرجات التنميط، وننشئ ذلك الدليل إذا لم يكن موجودًا بالفعل:
$ export LD_PROFILE_OUTPUT=$(pwd)/prof_data; $ mkdir -p $LD_PROFILE_OUTPUT;
يتسبب LD_PROFILE في إلحاق مخرجات التنميط بملف المخرجات إذا كان موجودًا بالفعل، لذا نضمن عدم وجود بيانات تنميط سابقة:
$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile;
ثم نشغل البرنامج لإنتاج مخرجات التنميط، التي تُكتب إلى ملف في الدليل المحدد في LD_PROFILE_OUTPUT:
$ LD_LIBRARY_PATH=. ./prog; $ ls prof_data; libdemo.so.1.profile
ثم نستخدم الخيار sprof -p لتوليد تشكيلة مسطحة مع العد والنقرات:
$ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile; 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
الخيار sprof -q يولد رسم بياني للاستدعاءات:
$ sprof -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile; 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 <UNKNOWN> [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 <UNKNOWN> [3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 consumeCpu2 [2] -----------------------------------------------
أعلاه وأسفل، السلاسل "<UNKNOWN>" تمثل معرفات خارج الكائن المُشكّل (في هذا المثال، هذه حالات من main()).
الخيار sprof -c يولد قائمة بأزواج الاستدعاءات وعدد مرات حدوثها:
$ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile; <UNKNOWN> x1 1 x1 consumeCpu1 100 <UNKNOWN> x2 1 x2 consumeCpu2 1000
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس (لم تصدر بعد) |