| GPROF(1) | GNU | GPROF(1) |
نام (NAME)
aarch64-linux-gnu-gprof - نمایش دادههای پروفایل اجرای برنامه برای AArch64
خلاصه دستور (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" میزان زمان صرفشده در هر روال را محاسبه میکند. سپس این زمانها در امتداد یالهای گراف فراخوانی منتشر میشوند. چرخهها (Cycles) شناسایی میشوند و فراخوانیهای واردشده به یک چرخه، در زمان آن چرخه سهیم میگردند.
چندین شکل از خروجی از این تحلیل در دسترس است:
پروفایل مسطح (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 مشخص
شده باشد،
شمارش تنها
برای
نمادهای
منطبق چاپ
میشود.
اگر فایل دادههای پروفایل شامل رکوردهای شمارش بلوکهای پایه (basic-block) باشد، مشخص کردن گزینه -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 و کش را
برای
برنامه در
سیستمهایی
که از ترتیب
دلخواه
توابع در
فایل
اجرایی
پشتیبانی
میکنند،
بهبود بخشد.
جزئیات دقیق چگونگی وادار کردن پیونددهنده به قرار دادن توابع در یک ترتیب خاص به سیستم وابسته است و از حوزه این راهنما خارج است.
- "-R map_file"
- "--file-ordering map_file"
- گزینه --file-ordering
باعث
میشود
"gprof"
ترتیب
پیشنهادی
خط پیوند
فایلهای .o
را برای
برنامه بر
اساس
دادههای
پروفایل
چاپ کند.
این گزینه
ترتیبی را
پیشنهاد
میکند که
ممکن است
رفتار
صفحهبندی
(paging)، 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 باعث میشود گراف فراخوانی برنامه با یک روش اکتشافی تکمیل شود که فضای متنی فایل شیء را بررسی کرده و فراخوانیهای توابع در کد ماشین باینری را شناسایی میکند. از آنجا که رکوردهای عادی گراف فراخوانی تنها هنگام ورود به توابع تولید میشوند، این گزینه فرزندانی را شناسایی میکند که امکان داشت فراخوانی شوند، اما هرگز فراخوانی نشدند. فراخوانیهای توابعی که بدون فعالبودن قابلیت پروفایل کامپایل شدهاند نیز شناسایی میشوند، البته تنها در صورتی که ورودیهای جدول نمادها برای آنها موجود باشد. فراخوانیهای روتینهای کتابخانههای پویا معمولاً توسط این گزینه پیدا نمیشوند. والدین یا فرزندان شناساییشده از طریق این روش اکتشافی، در گراف فراخوانی با تعداد فراخوانی 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)
میزان دقت نمونهبرداری نشان داده میشود، اما در بهترین حالت ماهیت آماری دارد. ما فرض میکنیم زمان هر بار اجرای یک تابع را میتوان با تقسیم زمان کل تابع بر تعداد دفعاتی که تابع فراخوانی شده است بیان کرد. بنابراین زمانی که در امتداد یالهای گراف فراخوانی به والدین تابع منتقل میشود، مستقیماً با تعداد دفعاتی که آن یال پیموده شده تناسب دارد.
والدینی که خودشان پروفایل نشدهاند، زمان فرزندان پروفایلشدهشان به آنها منتقل میشود، اما در فهرست گراف فراخوانی به نظر میرسد که بهطور خودبهخودی فراخوانی شدهاند و زمان آنها به سطوح بالاتر منتقل نخواهد شد. به همین ترتیب، گیرندههای سیگنال، حتی اگر پروفایل شده باشند، به نظر میرسد که خودبهخودی هستند (اگرچه به دلایلی مبهمتر). هر یک از فرزندان پروفایلشده گیرندههای سیگنال باید زمانهایشان بهدرستی منتقل شود، مگر اینکه گیرنده سیگنال در حین اجرای روتین پروفایلسازی فراخوانی شده باشد، که در این صورت تمام اطلاعات از دست میرود.
برنامه پروفایلشده باید "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-2026 Free Software Foundation, Inc.
اجازهنامه کپی، توزیع یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه متأخرتر منتشرشده توسط بنیاد نرمافزارهای آزاد صادر شده است؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخهای از این مجوز در بخشی با عنوان "GNU Free Documentation License" گنجانده شده است.
| 2026-07-26 | binutils-2.47 |