| GPROF(1) | GNU | GPROF(1) |
نام (NAME)
riscv64-elf-gprof - نمایش دادههای تحلیل کارایی گراف فراخوانی
خلاصه دستور (SYNOPSIS)
gprof [ -[abcDhilLrsTvwxyz] ] [
-[ABCeEfFJnNOpPqQRStZ][name] ]
[ -I dirs ] [ -d[num] ] [ -k from/to ]
[ -m min-count ] [ -R map_file ] [ -t table-length ]
[ --[no-]annotated-source[=name] ]
[ --[no-]exec-counts[=name] ]
[ --[no-]flat-profile[=name] ] [ --[no-]graph[=name] ]
[ --[no-]time=name] [ --all-lines ] [ --brief ]
[ --debug[=level] ] [ --function-ordering ]
[ --file-ordering map_file ] [ --directory-path=dirs ]
[ --display-unused-functions ] [ --file-format=name ]
[ --file-info ] [ --help ] [ --line ] [ --inline-file-names ]
[ --min-count=n ] [ --no-static ] [ --print-path ]
[ --separate-files ] [ --static-call-graph ] [ --sum ]
[ --table-length=len ] [ --traditional ] [ --version ]
[ --width=n ] [ --ignore-non-functions ]
[ --demangle[=STYLE] ] [ --no-demangle ]
[--external-symbol-table=name]
[ image-file ] [ profile-file ... ]
توضیحات (DESCRIPTION)
دستور "gprof" یک پروفایل از اجرای برنامههای C، Pascal یا Fortran77 تولید میکند. اثر توابع فراخواندهشده در پروفایل هر فراخواننده لحاظ میشود. دادههای پروفایل از فایل پروفایل گراف فراخوانی (gmon.out بهصورت پیشفرض) خوانده میشود که توسط برنامههای کامپایلشده با گزینه -pg در "cc"، "pc" و "f77" ایجاد میگردد. همچنین گزینه -pg نسخههایی از توابع کتابخانهای را که برای پروفایلسازی کامپایل شدهاند پیوند میدهد. "Gprof" فایل شیء دادهشده (پیشفرض "a.out") را میخواند و ارتباط بین جدول نمادهای آن و پروفایل گراف فراخوانی از gmon.out را برقرار میکند. اگر بیش از یک فایل پروفایل مشخص شود، خروجی "gprof" مجموع اطلاعات پروفایل را در فایلهای مشخصشده نشان میدهد.
ابزار "Gprof" میزان زمان سپریشده در هر تابع را محاسبه میکند. سپس این زمانها در امتداد یالهای گراف فراخوانی انتشار مییابند. چرخهها شناسایی میشوند و فراخوانیها به یک چرخه، در زمان آن چرخه سهیم میشوند.
چندین شکل از خروجی از این تحلیل در دسترس است.
پروفایل مسطح (flat profile) نشان میدهد که برنامه شما چه مقدار زمان در هر تابع صرف کرده است و آن تابع چند بار فراخوانی شده است. اگر فقط میخواهید بدانید کدام توابع بیشترین چرخههای پردازشی را مصرف میکنند، در اینجا بهطور خلاصه بیان شده است.
گراف فراخوانی (call graph) برای هر تابع نشان میدهد کدام توابع آن را فراخوانی کردهاند، چه توابع دیگری را فراخوانی کرده و چند بار این کار انجام شده است. همچنین تخمینی از میزان زمان سپریشده در زیرروالهای هر تابع وجود دارد. این بخش میتواند جاهایی را پیشنهاد دهد که شاید بتوانید فراخوانیهای توابع زمانبر را حذف کنید.
فهرست کد منبع نشانهگذاریشده (annotated source) نسخهای از کد منبع برنامه است که با تعداد دفعات اجرای هر خط از برنامه برچسبگذاری شده است.
گزینهها (OPTIONS)
این گزینهها مشخص میکنند که "gprof" کدامیک از چندین قالب خروجی را باید تولید کند.
بسیاری از این گزینهها یک symspec اختیاری دریافت میکنند تا توابعی را برای گنجاندن یا حذف کردن مشخص نمایند. این گزینهها میتوانند چندین بار با symspecهای متفاوت مشخص شوند تا دستههایی از نمادها را مشمول یا مستثنی کنند.
مشخص کردن هر یک از این گزینهها، حالت پیشفرض (-p -q) را که یک پروفایل مسطح و تحلیل گراف فراخوانی برای تمام توابع چاپ میکند لغو مینماید.
- "-A[symspec]"
- "--annotated-source[=symspec]"
- گزینه -A باعث میشود "gprof" کد منبع نشانهگذاریشده را چاپ کند. اگر symspec مشخص شده باشد، خروجی فقط برای نمادهای منطبق چاپ میشود.
- "-b"
- "--brief"
- اگر گزینه -b داده شود، "gprof" توضیحات طولانی را که به تشریح معنای تمام فیلدهای جدولها میپردازند چاپ نمیکند. این گزینه زمانی مفید است که قصد چاپ خروجی را دارید یا از دیدن توضیحات طولانی خسته شدهاید.
- "-B"
- گزینه -B باعث میشود "gprof" تحلیل گراف فراخوانی را چاپ کند.
- "-C[symspec]"
- "--exec-counts[=symspec]"
- گزینه -C
باعث
میشود
"gprof"
شمارشی از
توابع و
تعداد
دفعات
فراخوانی
هر یک را
چاپ کند.
اگر symspec مشخص
شده باشد،
شمارش فقط
برای
نمادهای
منطبق چاپ
میشود.
اگر فایل دادههای پروفایل شامل رکوردهای شمارش بلوک پایه باشد، مشخص کردن گزینه -l همراه با -C باعث میشود تعداد دفعات اجرای بلوکهای پایه شمارش شده و نمایش داده شود.
- "-i"
- "--file-info"
- گزینه -i باعث میشود "gprof" اطلاعات خلاصهای درباره فایل(های) دادههای پروفایل نمایش داده و سپس خارج شود. تعداد رکوردهای هیستوگرام، گراف فراخوانی و رکوردهای شمارش بلوک پایه نمایش داده میشود.
- "-I dirs"
- "--directory-path=dirs"
- گزینه -I فهرستی از دایرکتوریهای جستجو را برای یافتن فایلهای منبع مشخص میکند. متغیر محیطی GPROF_PATH نیز میتواند برای انتقال این اطلاعات استفاده شود. این گزینه بیشتر برای خروجی کد منبع نشانهگذاریشده کاربرد دارد.
- "-J[symspec]"
- "--no-annotated-source[=symspec]"
- گزینه -J باعث میشود "gprof" کد منبع نشانهگذاریشده را چاپ نکند. اگر symspec مشخص شده باشد، "gprof" کد منبع نشانهگذاریشده را چاپ میکند اما نمادهای منطبق را مستثنی میسازد.
- "-L"
- "--print-path"
- بهطور معمول، نام فایلهای منبع بدون مؤلفه مسیر چاپ میشوند. گزینه -L باعث میشود "gprof" مسیر کامل نام فایلهای منبع را چاپ کند که از اطلاعات اشکالزدایی نمادین در فایل تصویر تعیین میشود و نسبت به دایرکتوریای است که کامپایلر در آن فراخوانی شده بود.
- "-p[symspec]"
- "--flat-profile[=symspec]"
- گزینه -p باعث میشود "gprof" یک پروفایل مسطح چاپ کند. اگر symspec مشخص شده باشد، پروفایل مسطح فقط برای نمادهای منطبق چاپ میشود.
- "-P[symspec]"
- "--no-flat-profile[=symspec]"
- گزینه -P باعث میشود "gprof" از چاپ پروفایل مسطح جلوگیری کند. اگر symspec مشخص شده باشد، "gprof" پروفایل مسطح را چاپ میکند اما نمادهای منطبق را مستثنی میسازد.
- "-q[symspec]"
- "--graph[=symspec]"
- گزینه -q باعث میشود "gprof" تحلیل گراف فراخوانی را چاپ کند. اگر symspec مشخص شده باشد، گراف فراخوانی فقط برای نمادهای منطبق و فرزندان آنها چاپ میشود.
- "-Q[symspec]"
- "--no-graph[=symspec]"
- گزینه -Q باعث میشود "gprof" از چاپ گراف فراخوانی جلوگیری کند. اگر symspec مشخص شده باشد، "gprof" گراف فراخوانی را چاپ میکند اما نمادهای منطبق را مستثنی میسازد.
- "-t"
- "--table-length=num"
- گزینه -t باعث میشود هنگام فعال بودن نشانهگذاری سورس، num خط از فعالترین خطوط منبع در هر فایل منبع فهرست شوند. مقدار پیشفرض 10 است.
- "-y"
- "--separate-files"
- این گزینه فقط بر خروجی کد منبع نشانهگذاریشده تأثیر میگذارد. بهطور معمول، "gprof" فایلهای منبع نشانهگذاریشده را در خروجی استاندارد چاپ میکند. اگر این گزینه مشخص شود، کد منبع نشانهگذاریشده برای فایلی به نام path/filename در فایلی به نام filename-ann تولید میشود. اگر سیستم فایل زیرین filename-ann را کوتاه کند به نحوی که روی filename اصلی بازنویسی شود، "gprof" کد منبع نشانهگذاریشده را در فایلی به نام filename.ann تولید میکند (اگر نام فایل اصلی پسوندی داشته باشد، آن پسوند با .ann جایگزین میشود).
- "-Z[symspec]"
- "--no-exec-counts[=symspec]"
- گزینه -Z باعث میشود "gprof" تعداد دفعات فراخوانی توابع را چاپ نکند. اگر symspec مشخص شده باشد، شمارش چاپ میشود اما نمادهای منطبق مستثنی میگردند.
- "-r"
- "--function-ordering"
- گزینه --function-ordering
باعث
میشود
"gprof" یک
ترتیب
پیشنهادی
برای توابع
برنامه بر
اساس
دادههای
پروفایل
چاپ کند.
این گزینه
ترتیبی را
پیشنهاد
میکند که
ممکن است
رفتار
صفحهبندی
(paging)، TLB و حافظه
نهان (cache) را
برای
برنامه در
سیستمهایی
که از ترتیب
دلخواه
توابع در یک
فایل
اجرایی
پشتیبانی
میکنند،
بهبود بخشد.
جزئیات دقیق نحوه وادار کردن پیونددهنده به قرار دادن توابع در یک ترتیب خاص وابسته به سیستم است و خارج از حیطه این راهنما قرار دارد.
- "-R map_file"
- "--file-ordering map_file"
- گزینه --file-ordering
باعث
میشود
"gprof" یک
ترتیب
پیشنهادی
برای خط
پیوند
فایلهای o.
برای
برنامه بر
اساس
دادههای
پروفایل
چاپ کند.
این گزینه
ترتیبی را
پیشنهاد
میدهد که
ممکن است
رفتار
صفحهبندی،
TLB و حافظه
نهان را
برای
برنامه در
سیستمهایی
که از ترتیب
دلخواه
توابع در
فایل
اجرایی
پشتیبانی
نمیکنند،
بهبود بخشد.
استفاده از آرگومان -a همراه با این گزینه بسیار توصیه میشود.
آرگومان map_file مسیری به یک فایل است که نگاشت نام تابع به فایل شیء را فراهم میکند. ساختار این فایل مشابه خروجی برنامه "nm" است.
c-parse.o:00000000 T yyparse c-parse.o:00000004 C yyerrflag c-lang.o:00000000 T maybe_objc_method_name c-lang.o:00000000 T print_lang_statistics c-lang.o:00000000 T recognize_objc_keyword c-decl.o:00000000 T print_lang_identifier c-decl.o:00000000 T print_lang_type ...
برای ایجاد یک map_file با GNU "nm"، دستوری مانند این را وارد کنید: "nm --extern-only --defined-only -v --print-file-name program-name".
- "-T"
- "--traditional"
- گزینه -T باعث میشود "gprof" خروجی خود را به سبک «سنتی» BSD چاپ کند.
- "-w width"
- "--width=width"
- عرض خطوط خروجی را برابر با width تنظیم میکند. در حال حاضر فقط هنگام چاپ نمایه توابع در پایین گراف فراخوانی استفاده میشود.
- "-x"
- "--all-lines"
- این گزینه فقط بر خروجی کد منبع نشانهگذاریشده تأثیر میگذارد. بهطور پیشفرض، فقط خطوط ابتدای یک بلوک پایه نشانهگذاری میشوند. اگر این گزینه مشخص شود، هر خط در یک بلوک پایه با تکرار حاشیهنویسی خط اول نشانهگذاری میشود. این رفتار مشابه گزینه -a در "tcov" است.
- "--demangle[=style]"
- "--no-demangle"
- این گزینهها کنترل میکنند که آیا نام نمادهای ++C هنگام چاپ خروجی دمنگل (demangle) شوند یا خیر. حالت پیشفرض، دمنگل کردن نمادها است. گزینه "--no-demangle" میتواند برای غیرفعال کردن دمنگل استفاده شود. کامپایلرهای مختلف سبکهای منگل متفاوتی دارند. آرگومان اختیاری سبک دمنگل میتواند برای انتخاب سبک مناسب با کامپایلر شما استفاده شود.
گزینههای تحلیل (Analysis Options)
- "-a"
- "--no-static"
- گزینه -a باعث میشود "gprof" از چاپ توابع تعریفشده بهصورت ایستا (خصوصی) خودداری کند. (اینها توابعی هستند که نام آنها بهعنوان عمومی فهرست نشده است و در خارج از فایل/تابع/بلوکی که تعریف شدهاند قابل مشاهده نیستند.) زمان سپریشده در این توابع، فراخوانیها به/از آنها و غیره همگی به تابعی نسبت داده میشوند که مستقیماً قبل از آن در فایل اجرایی بارگذاری شده است. این گزینه هم بر پروفایل مسطح و هم بر گراف فراخوانی تأثیر میگذارد.
- "-c"
- "--static-call-graph"
- گزینه -c باعث میشود گراف فراخوانی برنامه با یک روش کاوشگرانه (heuristic) تقویت شود که فضای متنی فایل شیء را بررسی کرده و فراخوانیهای توابع را در کد ماشین دودویی شناسایی میکند. از آنجا که رکوردهای عادی گراف فراخوانی فقط هنگام ورود به توابع تولید میشوند، این گزینه فرزندانی را شناسایی میکند که ممکن بود فراخوانی شوند، اما هرگز فراخوانی نشدند. همچنین فراخوانیها به توابعی که با فعال بودن پروفایلسازی کامپایل نشدهاند نیز شناسایی میشوند، اما تنها در صورتی که ورودیهای جدول نمادها برای آنها موجود باشد. فراخوانیها به توابع کتابخانههای پویا معمولاً توسط این گزینه پیدا نمیشوند. والدین یا فرزندان شناساییشده با این روش در گراف فراخوانی با تعداد فراخوانی 0 نشان داده میشوند.
- "-D"
- "--ignore-non-functions"
- گزینه -D باعث میشود "gprof" نمادهایی را که بهعنوان تابع شناخته نمیشوند نادیده بگیرد. این گزینه در سیستمهایی که از آن پشتیبانی میکنند (مانند Solaris و HPUX) دادههای پروفایل دقیقتری ارائه میدهد.
- "-k from/to"
- گزینه -k به شما امکان میدهد هر کمانی از نمادهای منطبق با symspec from به نمادهای منطبق با symspec to را از گراف فراخوانی حذف کنید.
- "-l"
- "--line"
- گزینه -l
پروفایلسازی
خطبهخط
را فعال
میکند که
باعث
میشود
رخدادهای
هیستوگرام
بهجای
توابع، به
خطوط مجزای
کد منبع
نسبت داده
شوند. این
ویژگی فقط
با
برنامههایی
کار میکند
که توسط
نسخههای
قدیمیتر
کامپایلر
"gcc"
کامپایل
شده باشند.
نسخههای
جدیدتر
"gcc"
بهگونهای
طراحی
شدهاند که
بهجای آن
با ابزار
"gcov" کار
کنند.
اگر برنامه با فعال بودن شمارش بلوکهای پایه کامپایل شده باشد، این گزینه همچنین مشخص میکند که هر خط کد چند بار اجرا شده است. اگرچه پروفایلسازی خطبهخط میتواند به تعیین این موضوع کمک کند که برنامه در کدام قسمت از یک تابع بزرگ زمان خود را سپری میکند، اما زمان اجرای "gprof" را به میزان قابل توجهی افزایش داده و خطاهای آماری را بزرگنمایی میکند.
- "--inline-file-names"
- این گزینه باعث میشود "gprof" فایل منبع را پس از هر نماد، هم در پروفایل مسطح و هم در گراف فراخوانی چاپ کند. در صورت استفاده با گزینه -L، مسیر کامل فایل چاپ میشود.
- "-m num"
- "--min-count=num"
- این گزینه فقط بر خروجی تعداد دفعات اجرا تأثیر میگذارد. نمادهایی که کمتر از num بار اجرا شده باشند نشان داده نمیشوند.
- "-nsymspec"
- "--time=symspec"
- گزینه -n باعث میشود "gprof" در تحلیل گراف فراخوانی خود، زمانها را فقط برای نمادهای منطبق با symspec انتشار دهد.
- "-Nsymspec"
- "--no-time=symspec"
- گزینه -N باعث میشود "gprof" در تحلیل گراف فراخوانی خود، زمانها را برای نمادهای منطبق با symspec انتشار ندهد.
- "-Sfilename"
- "--external-symbol-table=filename"
- گزینه -S باعث میشود "gprof" بهجای خواندن جدول نمادها از فایل شیء دادهشده (پیشفرض "a.out")، یک فایل جدول نمادهای خارجی مانند /proc/kallsyms را بخواند. این ویژگی برای تحلیل کارایی ماژولهای هسته مفید است.
- "-z"
- "--display-unused-functions"
- اگر گزینه -z را مشخص کنید، "gprof" تمام توابع را در پروفایل مسطح ذکر میکند، حتی آنهایی که هرگز فراخوانی نشدهاند و هیچ زمانی در آنها صرف نشده است. این گزینه در ترکیب با گزینه -c برای کشف توابعی که هرگز فراخوانی نشدهاند مفید است.
گزینههای متفرقه (Miscellaneous Options)
- "-d[num]"
- "--debug[=num]"
- گزینه -d num گزینههای اشکالزدایی را مشخص میکند. اگر num مشخص نشده باشد، تمام اشکالزداییها را فعال میکند.
- "-h"
- "--help"
- گزینه -h راهنمای استفاده از خط فرمان را چاپ میکند.
- "-Oname"
- "--file-format=name"
- قالب فایلهای دادههای پروفایل را انتخاب میکند. قالبهای شناختهشده عبارتند از auto (پیشفرض)، bsd، 4.4bsd، magic و prof (هنوز پشتیبانی نمیشود).
- "-s"
- "--sum"
- گزینه -s
باعث
میشود
"gprof"
اطلاعات
موجود در
فایلهای
دادههای
پروفایل
خواندهشده
را خلاصه
کرده و یک
فایل
دادههای
پروفایل به
نام gmon.sum
بنویسد که
شامل تمام
اطلاعات
فایلهای
دادههای
پروفایل
خواندهشده
توسط "gprof"
است. فایل gmon.sum
ممکن است
یکی از
فایلهای
ورودی
مشخصشده
باشد؛ اثر
این کار
ادغام
دادههای
سایر
فایلهای
ورودی در gmon.sum
خواهد بود.
در نهایت میتوانید "gprof" را مجدداً بدون -s اجرا کنید تا دادههای تجمیعی در فایل gmon.sum را تحلیل نمایید.
- "-v"
- "--version"
- فلگ -v باعث میشود "gprof" شماره نسخه فعلی را چاپ کرده و سپس خارج شود.
گزینههای منسوخشده (Deprecated Options)
این گزینهها با نسخههای جدیدتری که از symspec استفاده میکنند جایگزین شدهاند.
- "-e function_name"
- گزینه -e function به "gprof" میگوید که اطلاعات مربوط به تابع function_name (و فرزندان آن...) را در گراف فراخوانی چاپ نکند. این تابع همچنان بهعنوان فرزند هر تابعی که آن را فراخوانی میکند فهرست میشود، اما شماره نمایه آن بهصورت [not printed] نمایش داده خواهد شد. بیش از یک گزینه -e میتواند مشخص شود؛ با هر گزینه -e فقط یک function_name میتواند تعیین گردد.
- "-E function_name"
- گزینه "-E function" مشابه گزینه "-e" عمل میکند، با این تفاوت که زمان سپریشده در این تابع (و فرزندانی که از هیچ جای دیگری فراخوانی نشدهاند) برای محاسبه درصدهای زمان در گراف فراخوانی استفاده نخواهد شد. بیش از یک گزینه -E میتواند مشخص شود؛ با هر گزینه -E فقط یک function_name میتواند تعیین گردد.
- "-f function_name"
- گزینه -f function باعث میشود "gprof" گراف فراخوانی را به تابع function_name و فرزندان آن (و فرزندان آنها...) محدود کند. بیش از یک گزینه -f میتواند مشخص شود؛ با هر گزینه -f فقط یک function_name میتواند تعیین گردد.
- "-F function_name"
- گزینه -F function مشابه گزینه "-f" عمل میکند، اما فقط زمان سپریشده در تابع و فرزندان آن (و فرزندان آنها...) برای تعیین زمان کل و درصدهای زمانی در گراف فراخوانی استفاده خواهد شد. بیش از یک گزینه -F میتواند مشخص شود؛ با هر گزینه -F فقط یک function_name میتواند تعیین گردد. گزینه -F بر گزینه -E تقدم دارد.
فایلها (FILES)
- "a.out"
- فهرست نمادها و فضای متن (کد).
- "gmon.out"
- گراف فراخوانی و پروفایل پویا.
- "gmon.sum"
- گراف فراخوانی و پروفایل پویای خلاصه شده.
اشکالات (BUGS)
دقت و دانهبندی (granularity) نمونهبرداری نشان داده میشود، اما در بهترین حالت ماهیت آماری دارد. ما فرض میکنیم که زمان صرفشده برای هر بار اجرای یک تابع میتواند با تقسیم زمان کل تابع بر تعداد دفعات فراخوانی آن بیان شود. بنابراین، زمانی که در امتداد کمانهای گراف فراخوانی به والدین تابع انتشار مییابد، مستقیماً متناسب با تعداد دفعاتی است که آن کمان طی شده است.
والدینی که خودشان پروفایلسازی نشدهاند، زمان فرزندان پروفایلشدهشان به آنها انتشار مییابد، اما در فهرست گراف فراخوانی به نظر میرسد که بهصورت خودبهخودی (spontaneous) فراخوانی شدهاند و زمان آنها فراتر انتشار نخواهد یافت. به همین ترتیب، گیرندههای سیگنال (signal catchers)، حتی اگر پروفایلسازی شده باشند، خودبهخودی به نظر میرسند (اگرچه به دلایل پیچیدهتر). زمان هر فرزند پروفایلشده از گیرندههای سیگنال باید بهدرستی انتشار یابد، مگر اینکه گیرنده سیگنال در طول اجرای روال پروفایلسازی فراخوانی شده باشد که در این صورت اطلاعات از دست میرود.
برنامه پروفایلشده باید "exit"(2) را فراخوانی کند یا بهطور عادی بازگردد تا اطلاعات پروفایل در فایل gmon.out ذخیره شود.
همچنین ببینید (SEE ALSO)
monitor(3)، profil(2)، cc(1)، prof(1) و مدخل Info برای gprof.
"An Execution Profiler for Modular Programs", by S. Graham, P. Kessler, M. McKusick; Software - Practice and Experience, Vol. 13, pp. 671-685, 1983.
"gprof: A Call Graph Execution Profiler", by S. Graham, P. Kessler, M. McKusick; Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June 1982.
حق نشر (COPYRIGHT)
Copyright (c) 1988-2025 Free Software Foundation, Inc.
مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه متأخر دیگر منتشر شده توسط بنیاد نرمافزار آزاد اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.
| 2025-11-10 | binutils-2.45.1 |