.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "GPROF 1" .TH GPROF 1 2025-11-10 binutils-2.45.1 GNU .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" gprof \- نمایش داده‌های تحلیل کارایی گراف فراخوانی .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" gprof [ \-[abcDhilLrsTvwxyz] ] [ \-[ABCeEfFJnNOpPqQRStZ][\fIname\fR] ] [ \-I \fIdirs\fR ] [ \-d[\fInum\fR] ] [ \-k \fIfrom/to\fR ] [ \-m \fImin\-count\fR ] [ \-R \fImap_file\fR ] [ \-t \fItable\-length\fR ] [ \-\-[no\-]annotated\-source[=\fIname\fR] ] [ \-\-[no\-]exec\-counts[=\fIname\fR] ] [ \-\-[no\-]flat\-profile[=\fIname\fR] ] [ \-\-[no\-]graph[=\fIname\fR] ] [ \-\-[no\-]time=\fIname\fR] [ \-\-all\-lines ] [ \-\-brief ] [ \-\-debug[=\fIlevel\fR] ] [ \-\-function\-ordering ] [ \-\-file\-ordering \fImap_file\fR ] [ \-\-directory\-path=\fIdirs\fR ] [ \-\-display\-unused\-functions ] [ \-\-file\-format=\fIname\fR ] [ \-\-file\-info ] [ \-\-help ] [ \-\-line ] [ \-\-inline\-file\-names ] [ \-\-min\-count=\fIn\fR ] [ \-\-no\-static ] [ \-\-print\-path ] [ \-\-separate\-files ] [ \-\-static\-call\-graph ] [ \-\-sum ] [ \-\-table\-length=\fIlen\fR ] [ \-\-traditional ] [ \-\-version ] [ \-\-width=\fIn\fR ] [ \-\-ignore\-non\-functions ] [ \-\-demangle[=\fISTYLE\fR] ] [ \-\-no\-demangle ] [\-\-external\-symbol\-table=name] [ \fIimage\-file\fR ] [ \fIprofile\-file\fR ... ].SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" دستور \&\f(CW\*(C`gprof\*(C'\fR یک نمایهٔ اجرایی (execution profile) از برنامه‌های C، Pascal، یا Fortran77 تولید می‌کند. اثر روتین‌های فراخوانی‌شده در نمایهٔ هر فراخواننده لحاظ می‌شود. داده‌های نمایه از فایل نمایهٔ نمودار فراخوانی (به‌طور پیش‌فرض \fIgmon.out\fR) خوانده می‌شوند که توسط برنامه‌های کامپایل‌شده با گزینهٔ \fB\-pg\fR در \&\f(CW\*(C`cc\*(C'\fR، \f(CW\*(C`pc\*(C'\fR و \f(CW\*(C`f77\*(C'\fR ایجاد می‌گردد. همچنین گزینهٔ \fB\-pg\fR نسخه‌هایی از روتین‌های کتابخانه‌ای را که برای نمایه‌سازی کامپایل شده‌اند پیوند (link) می‌دهد. برنامهٔ \f(CW\*(C`gprof\*(C'\fR فایل شیء (object file) داده‌شده را (به‌طور پیش‌فرض \f(CW\*(C`a.out\*(C'\fR) می‌خواند و رابطهٔ میان جدول نمادهای آن و نمایهٔ نمودار فراخوانی در \fIgmon.out\fR را برقرار می‌کند. اگر بیش از یک فایل نمایه مشخص شده باشد، خروجی \f(CW\*(C`gprof\*(C'\fR مجموع اطلاعات نمایه در فایل‌های نمایهٔ ارائه‌شده را نشان می‌دهد. .PP دستور \&\f(CW\*(C`gprof\*(C'\fR مقدار زمان صرف‌شده در هر روتین را محاسبه می‌کند. سپس، این زمان‌ها در امتداد یال‌های نمودار فراخوانی انتشار می‌یابند. چرخه‌ها (cycles) شناسایی شده و فراخوانی‌ها به درون یک چرخه، در زمان آن چرخه سهیم می‌شوند. .PP چندین قالب خروجی از این تحلیل در دسترس است. .PP بخش \fIflat profile\fR (نمایهٔ تخت) نشان می‌دهد برنامهٔ شما چه مقدار زمان در هر تابع صرف کرده و آن تابع چند بار فراخوانی شده است. اگر صرفاً می‌خواهید بدانید کدام توابع بیشترین چرخه‌های پردازشی را مصرف می‌کنند، در اینجا به‌طور خلاصه بیان شده است. .PP بخش \fIcall graph\fR (نمودار فراخوانی) برای هر تابع نشان می‌دهد چه توابعی آن را فراخوانی کرده‌اند، آن تابع چه توابع دیگری را فراخوانی کرده، و چند بار این فراخوانی رخ داده است. همچنین تخمینی از میزان زمان صرف‌شده در زیرروال‌های هر تابع ارائه می‌شود. این اطلاعات می‌تواند نقاطی را پیشنهاد دهد که شاید بتوانید در آن‌ها فراخوانی‌های تابعی پرمصرف و زمان‌بر را حذف کنید. .PP فهرست \fIannotated source\fR (کد منبع حاشیه‌نویسی‌شده) رونوشتی از کد منبع برنامه است که با تعداد دفعات اجرای هر خط از برنامه برچسب‌گذاری شده است. .SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" این گزینه‌ها تعیین می‌کنند که \&\f(CW\*(C`gprof\*(C'\fR باید کدام‌یک از قالب‌های خروجی را تولید کند. .PP بسیاری از این گزینه‌ها یک \fIsymspec\fR اختیاری دریافت می‌کنند تا توابع مورد نظر برای گنجاندن یا مستثنی کردن را مشخص نمایند. این گزینه‌ها می‌توانند چندین بار با symspecهای مختلف تکرار شوند تا مجموعه‌هایی از نمادها مشمول یا مستثنی گردند. .PP تعیین هر یک از این گزینه‌ها حالت پیش‌فرض (\fB\-p \-q\fR) را که چاپ نمایهٔ تخت و تحلیل نمودار فراخوانی برای تمام توابع است، لغو می‌کند. .ie n .IP """\-A[\fIsymspec\fR]""" 4 .el .IP \f(CW\-A[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-A[symspec]" .PD 0 .ie n .IP """\-\-annotated\-source[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-annotated\-source[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--annotated-source[=symspec]" .PD گزینهٔ \fB\-A\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR کد منبع حاشیه‌نویسی‌شده را چاپ کند. اگر \fIsymspec\fR مشخص شده باشد، خروجی تنها برای نمادهای منطبق چاپ می‌شود. .ie n .IP """\-b""" 4 .el .IP \f(CW\-b\fR 4 .IX Item "-b" .PD 0 .ie n .IP """\-\-brief""" 4 .el .IP \f(CW\-\-brief\fR 4 .IX Item "--brief" .PD اگر گزینهٔ \fB\-b\fR داده شود، \f(CW\*(C`gprof\*(C'\fR متن‌های طولانی را که به توضیح معنای فیلدهای جداول می‌پردازند چاپ نمی‌کند. این گزینه هنگامی مناسب است که قصد چاپ خروجی را دارید یا مایل به دیدن مجدد این توضیحات نیستید. .ie n .IP """\-B""" 4 .el .IP \f(CW\-B\fR 4 .IX Item "-B" گزینهٔ \fB\-B\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR تحلیل نمودار فراخوانی را چاپ کند. .ie n .IP """\-C[\fIsymspec\fR]""" 4 .el .IP \f(CW\-C[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-C[symspec]" .PD 0 .ie n .IP """\-\-exec\-counts[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-exec\-counts[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--exec-counts[=symspec]" .PD گزینهٔ \fB\-C\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR شمارش توابع و تعداد دفعات فراخوانی هر یک را چاپ کند. اگر \fIsymspec\fR مشخص شده باشد، این شمارش فقط برای نمادهای منطبق چاپ می‌شود. .Sp اگر فایل داده‌های نمایه شامل رکوردهای شمارش بلوک پایه (basic\-block) باشد، تعیین گزینهٔ \fB\-l\fR در کنار \fB\-C\fR سبب شمارش و نمایش تعداد دفعات اجرای بلوک‌های پایه خواهد شد. .ie n .IP """\-i""" 4 .el .IP \f(CW\-i\fR 4 .IX Item "-i" .PD 0 .ie n .IP """\-\-file\-info""" 4 .el .IP \f(CW\-\-file\-info\fR 4 .IX Item "--file-info" .PD گزینهٔ \fB\-i\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR اطلاعات خلاصه‌ای دربارهٔ فایل(های) دادهٔ نمایه نمایش داده و سپس خارج شود. تعداد رکوردهای هیستوگرام، نمودار فراخوانی و شمارش‌های بلوک پایه نمایش داده می‌شود. .ie n .IP """\-I \fIdirs\fR""" 4 .el .IP "\f(CW\-I \fR\f(CIdirs\fR\f(CW\fR" 4 .IX Item "-I dirs" .PD 0 .ie n .IP """\-\-directory\-path=\fIdirs\fR""" 4 .el .IP \f(CW\-\-directory\-path=\fR\f(CIdirs\fR\f(CW\fR 4 .IX Item "--directory-path=dirs" .PD گزینهٔ \fB\-I\fR فهرستی از دایرکتوری‌های جستجو را برای یافتن فایل‌های منبع مشخص می‌کند. از متغیر محیطی \fIGPROF_PATH\fR نیز می‌توان برای انتقال این اطلاعات استفاده کرد. این گزینه غالباً برای خروجی کد منبع حاشیه‌نویسی‌شده به کار می‌رود. .ie n .IP """\-J[\fIsymspec\fR]""" 4 .el .IP \f(CW\-J[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-J[symspec]" .PD 0 .ie n .IP """\-\-no\-annotated\-source[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-no\-annotated\-source[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--no-annotated-source[=symspec]" .PD گزینهٔ \fB\-J\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR کد منبع حاشیه‌نویسی‌شده را چاپ نکند. اگر \fIsymspec\fR مشخص شده باشد، \f(CW\*(C`gprof\*(C'\fR منبع حاشیه‌نویسی‌شده را چاپ می‌کند اما نمادهای منطبق را مستثنی می‌سازد. .ie n .IP """\-L""" 4 .el .IP \f(CW\-L\fR 4 .IX Item "-L" .PD 0 .ie n .IP """\-\-print\-path""" 4 .el .IP \f(CW\-\-print\-path\fR 4 .IX Item "--print-path" .PD به‌طور معمول، نام فایل‌های منبع بدون بخش مسیر چاپ می‌شود. گزینهٔ \fB\-L\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR نام مسیر کامل فایل‌های منبع را چاپ کند؛ این مسیر از اطلاعات اشکال‌زدایی نمادین موجود در فایل ایمیج تعیین می‌شود و نسبت به دایرکتوری‌ای است که کامپایلر در آن فراخوانی شده بود. .ie n .IP """\-p[\fIsymspec\fR]""" 4 .el .IP \f(CW\-p[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-p[symspec]" .PD 0 .ie n .IP """\-\-flat\-profile[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-flat\-profile[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--flat-profile[=symspec]" .PD گزینهٔ \fB\-p\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR نمایهٔ تخت را چاپ کند. اگر \fIsymspec\fR مشخص شده باشد، نمایهٔ تخت را فقط برای نمادهای منطبق چاپ می‌کند. .ie n .IP """\-P[\fIsymspec\fR]""" 4 .el .IP \f(CW\-P[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-P[symspec]" .PD 0 .ie n .IP """\-\-no\-flat\-profile[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-no\-flat\-profile[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--no-flat-profile[=symspec]" .PD گزینهٔ \fB\-P\fR مانع از چاپ نمایهٔ تخت توسط \f(CW\*(C`gprof\*(C'\fR می‌شود. اگر \fIsymspec\fR مشخص شده باشد، \f(CW\*(C`gprof\*(C'\fR نمایهٔ تخت را چاپ می‌کند اما نمادهای منطبق را مستثنی می‌نماید. .ie n .IP """\-q[\fIsymspec\fR]""" 4 .el .IP \f(CW\-q[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-q[symspec]" .PD 0 .ie n .IP """\-\-graph[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-graph[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--graph[=symspec]" .PD گزینهٔ \fB\-q\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR تحلیل نمودار فراخوانی را چاپ کند. اگر \fIsymspec\fR مشخص شده باشد، نمودار فراخوانی را فقط برای نمادهای منطبق و فرزندان آن‌ها چاپ می‌کند. .ie n .IP """\-Q[\fIsymspec\fR]""" 4 .el .IP \f(CW\-Q[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-Q[symspec]" .PD 0 .ie n .IP """\-\-no\-graph[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-no\-graph[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--no-graph[=symspec]" .PD گزینهٔ \fB\-Q\fR از چاپ نمودار فراخوانی توسط \f(CW\*(C`gprof\*(C'\fR جلوگیری می‌کند. اگر \fIsymspec\fR مشخص شده باشد، \f(CW\*(C`gprof\*(C'\fR نمودار فراخوانی را چاپ می‌کند اما نمادهای منطبق را مستثنی می‌سازد. .ie n .IP """\-t""" 4 .el .IP \f(CW\-t\fR 4 .IX Item "-t".PD 0 .ie n .IP """\-\-table\-length=\fInum\fR""" 4 .el .IP \f(CW\-\-table\-length=\fR\f(CInum\fR\f(CW\fR 4 .IX Item "--table-length=num" .PD گزینهٔ \fB\-t\fR باعث می‌شود هنگامی که حاشیه‌نویسی کد مبدأ فعال است، \fInum\fR خط از فعال‌ترین خطوط کد در هر فایل مبدأ فهرست شوند. مقدار پیش‌فرض 10 است. .ie n .IP """\-y""" 4 .el .IP \f(CW\-y\fR 4 .IX Item "-y" .PD 0 .ie n .IP """\-\-separate\-files""" 4 .el .IP \f(CW\-\-separate\-files\fR 4 .IX Item "--separate-files" .PD این گزینه تنها بر خروجی کد مبدأ حاشیه‌نویسی‌شده تأثیر می‌گذارد. در حالت عادی، \f(CW\*(C`gprof\*(C'\fR فایل‌های مبدأ حاشیه‌نویسی‌شده را در خروجی استاندارد چاپ می‌کند. اگر این گزینه مشخص شود، کد مبدأ حاشیه‌نویسی‌شده برای فایلی به نام \fIpath/filename\fR در فایل \fIfilename\-ann\fR تولید می‌شود. اگر فایل‌سیستم زیربنایی نام \fIfilename\-ann\fR را طوری کوتاه کند که روی \fIfilename\fR اصلی بازنویسی شود، \f(CW\*(C`gprof\*(C'\fR در عوض کد مبدأ حاشیه‌نویسی‌شده را در فایل \fIfilename.ann\fR تولید می‌کند (اگر نام فایل اصلی دارای پسوند باشد، آن پسوند با \fI.ann\fR \fIجایگزین\fR می‌شود). .ie n .IP """\-Z[\fIsymspec\fR]""" 4 .el .IP \f(CW\-Z[\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "-Z[symspec]" .PD 0 .ie n .IP """\-\-no\-exec\-counts[=\fIsymspec\fR]""" 4 .el .IP \f(CW\-\-no\-exec\-counts[=\fR\f(CIsymspec\fR\f(CW]\fR 4 .IX Item "--no-exec-counts[=symspec]" .PD گزینهٔ \fB\-Z\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR شمارش توابع و تعداد دفعات فراخوانی هر یک را چاپ نکند. اگر \fIsymspec\fR مشخص شده باشد، شمارش چاپ می‌شود اما نمادهای منطبق مستثنی خواهند شد. .ie n .IP """\-r""" 4 .el .IP \f(CW\-r\fR 4 .IX Item "-r" .PD 0 .ie n .IP """\-\-function\-ordering""" 4 .el .IP \f(CW\-\-function\-ordering\fR 4 .IX Item "--function-ordering" .PD گزینهٔ \fB\-\-function\-ordering\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR ترتیب پیشنهادی توابع را برای برنامه بر اساس داده‌های پروفایل چاپ کند. این گزینه ترتیبی را پیشنهاد می‌دهد که ممکن است در سیستم‌هایی که از ترتیب دلخواه توابع در فایل اجرایی پشتیبانی می‌کنند، رفتار صفحه‌بندی (paging)، tlb و حافظهٔ نهان (cache) برنامه را بهبود بخشد. .Sp جزئیات دقیق چگونگی وادار کردن پیونددهنده (linker) به قرار دادن توابع در یک ترتیب خاص، وابسته به سیستم است و خارج از حیطهٔ این راهنما می‌باشد. .ie n .IP """\-R \fImap_file\fR""" 4 .el .IP "\f(CW\-R \fR\f(CImap_file\fR\f(CW\fR" 4 .IX Item "-R map_file" .PD 0 .ie n .IP """\-\-file\-ordering \fImap_file\fR""" 4 .el .IP "\f(CW\-\-file\-ordering \fR\f(CImap_file\fR\f(CW\fR" 4 .IX Item "--file-ordering map_file" .PD گزینهٔ \fB\-\-file\-ordering\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR ترتیب پیشنهادی فایل‌های .o را در خط پیوند برنامه بر اساس داده‌های پروفایل چاپ کند. این گزینه ترتیبی را پیشنهاد می‌دهد که ممکن است در سیستم‌هایی که از ترتیب دلخواه توابع در فایل اجرایی پشتیبانی نمی‌کنند، رفتار صفحه‌بندی (paging)، tlb و حافظهٔ نهان (cache) برنامه را بهبود بخشد. .Sp استفاده از آرگومان \fB\-a\fR همراه با این گزینه به‌شدت توصیه می‌شود. .Sp آرگومان \fImap_file\fR مسیر فایلی است که نگاشت نام تابع به فایل شیء (object file) را ارائه می‌دهد. قالب این فایل شبیه خروجی برنامهٔ \f(CW\*(C`nm\*(C'\fR است. .Sp .Vb 8 \& 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 \& ... .Ve .Sp برای ایجاد یک \fImap_file\fR با GNU \f(CW\*(C`nm\*(C'\fR، دستوری مانند زیر را اجرا کنید: \&\f(CW\*(C`nm \-\-extern\-only \-\-defined\-only \-v \-\-print\-file\-name program\-name\*(C'\fR. .ie n .IP """\-T""" 4 .el .IP \f(CW\-T\fR 4 .IX Item "-T" .PD 0 .ie n .IP """\-\-traditional""" 4 .el .IP \f(CW\-\-traditional\fR 4 .IX Item "--traditional" .PD گزینهٔ \fB\-T\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR خروجی خود را به سبک «سنتی» BSD چاپ کند. .ie n .IP """\-w \fIwidth\fR""" 4 .el .IP "\f(CW\-w \fR\f(CIwidth\fR\f(CW\fR" 4 .IX Item "-w width" .PD 0 .ie n .IP """\-\-width=\fIwidth\fR""" 4 .el .IP \f(CW\-\-width=\fR\f(CIwidth\fR\f(CW\fR 4 .IX Item "--width=width" .PD عرض خطوط خروجی را به \fIwidth\fR تنظیم می‌کند. در حال حاضر این گزینه فقط هنگام چاپ نمایهٔ توابع در انتهای نمودار فراخوانی (call graph) استفاده می‌شود. .ie n .IP """\-x""" 4 .el .IP \f(CW\-x\fR 4 .IX Item "-x" .PD 0 .ie n .IP """\-\-all\-lines""" 4 .el .IP \f(CW\-\-all\-lines\fR 4 .IX Item "--all-lines" .PD این گزینه تنها بر خروجی کد مبدأ حاشیه‌نویسی‌شده تأثیر می‌گذارد. به‌طور پیش‌فرض، فقط خطوط ابتدای یک بلوک پایه (basic block) حاشیه‌نویسی می‌شوند. اگر این گزینه مشخص شود، تک‌تک خطوط موجود در یک بلوک پایه با تکرار حاشیه‌نویسیِ خط اول، حاشیه‌نویسی می‌شوند. این رفتار مشابه گزینهٔ \fB\-a\fR در \f(CW\*(C`tcov\*(C'\fR است. .ie n .IP """\-\-demangle[=\fIstyle\fR]""" 4 .el .IP \f(CW\-\-demangle[=\fR\f(CIstyle\fR\f(CW]\fR 4 .IX Item "--demangle[=style]" .PD 0 .ie n .IP """\-\-no\-demangle""" 4 .el .IP \f(CW\-\-no\-demangle\fR 4 .IX Item "--no-demangle" .PD این گزینه‌ها کنترل می‌کنند که آیا نام نمادهای ++C هنگام چاپ خروجی بازگردانی (demangle) شوند یا خیر. حالت پیش‌فرض، بازگردانی نمادها است. از گزینهٔ \&\f(CW\*(C`\-\-no\-demangle\*(C'\fR می‌توان برای غیرفعال کردن demangling استفاده کرد. کامپایلرهای مختلف سبک‌های درهم‌ریزی (mangling) متفاوتی دارند. از آرگومان اختیاری سبکِ demangling می‌توان برای انتخاب سبک متناسب با کامپایلر خود استفاده نمود..SS "گزینه‌های تحلیل (Analysis Options)" .IX Subsection "Analysis Options" .ie n .IP """\-a""" 4 .el .IP \f(CW\-a\fR 4 .IX Item "-a" .PD 0 .ie n .IP """\-\-no\-static""" 4 .el .IP \f(CW\-\-no\-static\fR 4 .IX Item "--no-static" .PD گزینهٔ \fB\-a\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR از چاپ توابع اعلان‌شده به‌صورت ایستا (خصوصی) خودداری کند. (این‌ها توابعی هستند که نامشان به‌صورت سراسری فهرست نشده است و در خارج از فایل/تابع/بلوکی که در آن تعریف شده‌اند قابل مشاهده نیستند.) زمان صرف‌شده در این توابع، فراخوانی‌ها به/از آن‌ها و غیره، همگی به تابعی نسبت داده می‌شوند که در فایل اجرایی مستقیماً پیش از آن بارگذاری شده است. این گزینه هم بر پروفایل مسطح (flat profile) و هم بر گراف فراخوانی (call graph) تأثیر می‌گذارد. .ie n .IP """\-c""" 4 .el .IP \f(CW\-c\fR 4 .IX Item "-c" .PD 0 .ie n .IP """\-\-static\-call\-graph""" 4 .el .IP \f(CW\-\-static\-call\-graph\fR 4 .IX Item "--static-call-graph" .PD گزینهٔ \fB\-c\fR باعث می‌شود گراف فراخوانی برنامه با یک روش اکتشافی (heuristic) که فضای متنی (text space) فایل شیء را بررسی کرده و فراخوانی‌های توابع را در کد ماشین دودویی شناسایی می‌کند، تکمیل شود. از آنجا که رکوردهای عادی گراف فراخوانی تنها هنگام ورود به توابع تولید می‌شوند، این گزینه فرزندانی را شناسایی می‌کند که ممکن بود فراخوانی شوند، اما هرگز فراخوانی نشدند. فراخوانی‌های توابعی که با فعال بودن قابلیت پروفایل‌سازی کامپایل نشده‌اند نیز شناسایی می‌شوند، اما تنها در صورتی که مدخل‌هایی برای آن‌ها در جدول نمادها وجود داشته باشد. فراخوانی‌های روتین‌های کتابخانه‌های پویا معمولاً توسط این گزینه پیدا \fIنمی‌شوند\fR. والدین یا فرزندانی که از طریق این روش اکتشافی شناسایی می‌شوند، در گراف فراخوانی با تعداد فراخوانی \fB0\fR نشان داده می‌شوند. .ie n .IP """\-D""" 4 .el .IP \f(CW\-D\fR 4 .IX Item "-D" .PD 0 .ie n .IP """\-\-ignore\-non\-functions""" 4 .el .IP \f(CW\-\-ignore\-non\-functions\fR 4 .IX Item "--ignore-non-functions" .PD گزینهٔ \fB\-D\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR نمادهایی را که به‌عنوان تابع شناخته نمی‌شوند نادیده بگیرد. این گزینه روی سیستم‌هایی که از آن پشتیبانی می‌کنند (برای مثال Solaris و HPUX) داده‌های پروفایل دقیق‌تری ارائه می‌دهد. .ie n .IP """\-k \fIfrom\fR/\fIto\fR""" 4 .el .IP "\f(CW\-k \fR\f(CIfrom\fR\f(CW/\fR\f(CIto\fR\f(CW\fR" 4 .IX Item "-k from/to" گزینهٔ \fB\-k\fR به شما امکان می‌دهد هر یالی را در گراف فراخوانی، از نمادهای منطبق با symspec \fIfrom\fR به نمادهای منطبق با symspec \fIto\fR حذف کنید. .ie n .IP """\-l""" 4 .el .IP \f(CW\-l\fR 4 .IX Item "-l" .PD 0 .ie n .IP """\-\-line""" 4 .el .IP \f(CW\-\-line\fR 4 .IX Item "--line" .PD گزینهٔ \fB\-l\fR پروفایل‌سازی خط‌به‌خط را فعال می‌کند، که باعث می‌شود رخدادهای هیستوگرام به‌جای توابع، به خطوط مجزای کد منبع نسبت داده شوند. این قابلیت تنها با برنامه‌هایی کار می‌کند که با نسخه‌های قدیمی‌تر کامپایلر \f(CW\*(C`gcc\*(C'\fR کامپایل شده باشند. نسخه‌های جدیدتر \&\f(CW\*(C`gcc\*(C'\fR به‌گونه‌ای طراحی شده‌اند که به‌جای آن با ابزار \f(CW\*(C`gcov\*(C'\fR کار کنند. .Sp اگر برنامه با فعال بودن شمارش بلوک‌های پایه (basic\-block) کامپایل شده باشد، این گزینه همچنین مشخص می‌کند که هر خط از کد چند بار اجرا شده است. اگرچه پروفایل‌سازی خط‌به‌خط می‌تواند به تعیین دقیق بخشی از یک تابع بزرگ که برنامه زمان خود را در آن سپری می‌کند کمک کند، اما زمان اجرای \f(CW\*(C`gprof\*(C'\fR را نیز به‌میزان چشمگیری افزایش می‌دهد و خطاهای آماری را تشدید می‌کند. .ie n .IP """\-\-inline\-file\-names""" 4 .el .IP \f(CW\-\-inline\-file\-names\fR 4 .IX Item "--inline-file-names" این گزینه باعث می‌شود \f(CW\*(C`gprof\*(C'\fR فایل منبع را پس از هر نماد، هم در پروفایل مسطح و هم در گراف فراخوانی چاپ کند. در صورت استفاده هم‌زمان با گزینهٔ \fB\-L\fR، مسیر کامل فایل چاپ می‌شود. .ie n .IP """\-m \fInum\fR""" 4 .el .IP "\f(CW\-m \fR\f(CInum\fR\f(CW\fR" 4 .IX Item "-m num" .PD 0 .ie n .IP """\-\-min\-count=\fInum\fR""" 4 .el .IP \f(CW\-\-min\-count=\fR\f(CInum\fR\f(CW\fR 4 .IX Item "--min-count=num" .PD این گزینه تنها بر خروجی تعداد اجرا تأثیر می‌گذارد. از نمایش نمادهایی که کمتر از \fInum\fR بار اجرا شده باشند خودداری می‌شود. .ie n .IP """\-n\fIsymspec\fR""" 4 .el .IP \f(CW\-n\fR\f(CIsymspec\fR\f(CW\fR 4 .IX Item "-nsymspec" .PD 0 .ie n .IP """\-\-time=\fIsymspec\fR""" 4 .el .IP \f(CW\-\-time=\fR\f(CIsymspec\fR\f(CW\fR 4 .IX Item "--time=symspec" .PD گزینهٔ \fB\-n\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR در تحلیل گراف فراخوانی خود، زمان‌ها را تنها برای نمادهای منطبق با \fIsymspec\fR منتشر کند. .ie n .IP """\-N\fIsymspec\fR""" 4 .el .IP \f(CW\-N\fR\f(CIsymspec\fR\f(CW\fR 4 .IX Item "-Nsymspec" .PD 0 .ie n .IP """\-\-no\-time=\fIsymspec\fR""" 4 .el .IP \f(CW\-\-no\-time=\fR\f(CIsymspec\fR\f(CW\fR 4 .IX Item "--no-time=symspec" .PD گزینهٔ \fB\-N\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR در تحلیل گراف فراخوانی خود، زمان‌ها را برای نمادهای منطبق با \fIsymspec\fR منتشر نکند. .ie n .IP """\-S\fIfilename\fR""" 4 .el .IP \f(CW\-S\fR\f(CIfilename\fR\f(CW\fR 4 .IX Item "-Sfilename" .PD 0 .ie n .IP """\-\-external\-symbol\-table=\fIfilename\fR""" 4 .el .IP \f(CW\-\-external\-symbol\-table=\fR\f(CIfilename\fR\f(CW\fR 4 .IX Item "--external-symbol-table=filename" .PD گزینهٔ \fB\-S\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR به‌جای خواندن جدول نمادها از فایل شیء داده‌شده (پیش‌فرض \f(CW\*(C`a.out\*(C'\fR است)، یک فایل جدول نمادهای خارجی، مانند \fI/proc/kallsyms\fR را بخواند. این ویژگی برای پروفایل‌سازی ماژول‌های کرنل مفید است. .ie n .IP """\-z""" 4 .el .IP \f(CW\-z\fR 4 .IX Item "-z" .PD 0 .ie n .IP """\-\-display\-unused\-functions""" 4 .el .IP \f(CW\-\-display\-unused\-functions\fR 4 .IX Item "--display-unused-functions" .PD اگر گزینهٔ \fB\-z\fR را مشخص کنید، \f(CW\*(C`gprof\*(C'\fR همهٔ توابع را در پروفایل مسطح ذکر خواهد کرد؛ حتی توابعی که هرگز فراخوانی نشده‌اند و هیچ زمانی در آن‌ها صرف نشده است. این گزینه در ترکیب با گزینهٔ \&\fB\-c\fR برای یافتن روتین‌هایی که هرگز فراخوانی نشده‌اند کاربرد دارد..SS "گزینه‌های متفرقه (Miscellaneous Options)" .IX Subsection "Miscellaneous Options" .ie n .IP """\-d[\fInum\fR]""" 4 .el .IP \f(CW\-d[\fR\f(CInum\fR\f(CW]\fR 4 .IX Item "-d[num]" .PD 0 .ie n .IP """\-\-debug[=\fInum\fR]""" 4 .el .IP \f(CW\-\-debug[=\fR\f(CInum\fR\f(CW]\fR 4 .IX Item "--debug[=num]" .PD گزینهٔ \fB\-d\fR \fInum\fR گزینه‌های اشکال‌زدایی را مشخص می‌کند. اگر \fInum\fR تعیین نشود، تمام قابلیت‌های اشکال‌زدایی فعال می‌شوند. .ie n .IP """\-h""" 4 .el .IP \f(CW\-h\fR 4 .IX Item "-h" .PD 0 .ie n .IP """\-\-help""" 4 .el .IP \f(CW\-\-help\fR 4 .IX Item "--help" .PD گزینهٔ \fB\-h\fR نحوهٔ استفاده از خط فرمان را چاپ می‌کند. .ie n .IP """\-O\fIname\fR""" 4 .el .IP \f(CW\-O\fR\f(CIname\fR\f(CW\fR 4 .IX Item "-Oname" .PD 0 .ie n .IP """\-\-file\-format=\fIname\fR""" 4 .el .IP \f(CW\-\-file\-format=\fR\f(CIname\fR\f(CW\fR 4 .IX Item "--file-format=name" .PD قالب فایل‌های دادهٔ پروفایل را انتخاب می‌کند. قالب‌های شناخته‌شده عبارت‌اند از \&\fBauto\fR (پیش‌فرض)، \fBbsd\fR، \fB4.4bsd\fR، \fBmagic\fR، و \&\fBprof\fR (هنوز پشتیبانی نمی‌شود). .ie n .IP """\-s""" 4 .el .IP \f(CW\-s\fR 4 .IX Item "-s" .PD 0 .ie n .IP """\-\-sum""" 4 .el .IP \f(CW\-\-sum\fR 4 .IX Item "--sum" .PD گزینهٔ \fB\-s\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR اطلاعات موجود در فایل‌های دادهٔ پروفایلی را که خوانده است خلاصه‌سازی کند و یک فایل دادهٔ پروفایل به نام \fIgmon.sum\fR بنویسد که شامل تمام اطلاعات حاصل از فایل‌های دادهٔ پروفایل خوانده‌شده توسط \f(CW\*(C`gprof\*(C'\fR است. فایل \fIgmon.sum\fR می‌تواند یکی از فایل‌های ورودی تعیین‌شده باشد؛ تأثیر این کار، ادغام داده‌های سایر فایل‌های ورودی درون \fIgmon.sum\fR است. .Sp در نهایت می‌توانید مجدداً \f(CW\*(C`gprof\*(C'\fR را بدون \fB\-s\fR اجرا کنید تا داده‌های تجمیعی در فایل \fIgmon.sum\fR را تحلیل نمایید. .ie n .IP """\-v""" 4 .el .IP \f(CW\-v\fR 4 .IX Item "-v" .PD 0 .ie n .IP """\-\-version""" 4 .el .IP \f(CW\-\-version\fR 4 .IX Item "--version" .PD پرچم \fB\-v\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR شمارهٔ نسخهٔ فعلی را چاپ کند و سپس خارج شود. .SS "گزینه‌های منسوخ‌شده (Deprecated Options)" .IX Subsection "Deprecated Options" این گزینه‌ها با نسخه‌های جدیدتری که از symspecها استفاده می‌کنند، جایگزین شده‌اند. .ie n .IP """\-e \fIfunction_name\fR""" 4 .el .IP "\f(CW\-e \fR\f(CIfunction_name\fR\f(CW\fR" 4 .IX Item "-e function_name" گزینهٔ \fB\-e\fR \fIfunction\fR به \f(CW\*(C`gprof\*(C'\fR اعلام می‌کند که اطلاعات مربوط به تابع \fIfunction_name\fR (و فرزندان آن...) را در گراف فراخوانی چاپ نکند. این تابع همچنان به‌عنوان فرزندی از توابع فراخوانندهٔ آن فهرست می‌شود، اما شمارهٔ نمایهٔ آن به‌صورت \fB[not printed]\fR نمایش خواهد یافت. می‌توان بیش از یک گزینهٔ \fB\-e\fR را مشخص کرد؛ در هر گزینهٔ \fB\-e\fR تنها یک \fIfunction_name\fR می‌تواند تعیین شود. .ie n .IP """\-E \fIfunction_name\fR""" 4 .el .IP "\f(CW\-E \fR\f(CIfunction_name\fR\f(CW\fR" 4 .IX Item "-E function_name" گزینهٔ \f(CW\*(C`\-E \fR\f(CIfunction\fR\f(CW\*(C'\fR مشابه گزینهٔ \f(CW\*(C`\-e\*(C'\fR عمل می‌کند، اما زمان صرف‌شده در تابع (و فرزندانی که از هیچ جای دیگری فراخوانی نشده‌اند) برای محاسبهٔ درصدهای زمانی در گراف فراخوانی استفاده نخواهد شد. می‌توان بیش از یک گزینهٔ \fB\-E\fR را مشخص کرد؛ در هر گزینهٔ \fB\-E\fR تنها یک \&\fIfunction_name\fR می‌تواند تعیین شود. .ie n .IP """\-f \fIfunction_name\fR""" 4 .el .IP "\f(CW\-f \fR\f(CIfunction_name\fR\f(CW\fR" 4 .IX Item "-f function_name" گزینهٔ \fB\-f\fR \fIfunction\fR باعث می‌شود \f(CW\*(C`gprof\*(C'\fR گراف فراخوانی را به تابع \fIfunction_name\fR و فرزندان آن (و فرزندان آن‌ها...) محدود کند. می‌توان بیش از یک گزینهٔ \fB\-f\fR را مشخص کرد؛ در هر گزینهٔ \fB\-f\fR تنها یک \fIfunction_name\fR می‌تواند تعیین شود. .ie n .IP """\-F \fIfunction_name\fR""" 4 .el .IP "\f(CW\-F \fR\f(CIfunction_name\fR\f(CW\fR" 4 .IX Item "-F function_name" گزینهٔ \fB\-F\fR \fIfunction\fR مشابه گزینهٔ \f(CW\*(C`\-f\*(C'\fR عمل می‌کند، اما فقط زمان صرف‌شده در تابع و فرزندان آن (و فرزندان آن‌ها...) برای تعیین زمان کل و درصدهای زمانی در گراف فراخوانی استفاده خواهد شد. می‌توان بیش از یک گزینهٔ \fB\-F\fR را مشخص کرد؛ در هر گزینهٔ \&\fB\-F\fR تنها یک \fIfunction_name\fR می‌تواند تعیین شود. گزینهٔ \fB\-F\fR بر گزینهٔ \fB\-E\fR اولویت دارد..SH "فایل‌ها (FILES)" .IX Header "FILES" .ie n .IP """\fIa.out\fR""" 4 .el .IP \f(CW\fR\f(CIa.out\fR\f(CW\fR 4 .IX Item "a.out" فهرست نام‌ها و فضای متن (text space). .ie n .IP """\fIgmon.out\fR""" 4 .el .IP \f(CW\fR\f(CIgmon.out\fR\f(CW\fR 4 .IX Item "gmon.out" گراف فراخوانی پویا و پروفایل. .ie n .IP """\fIgmon.sum\fR""" 4 .el .IP \f(CW\fR\f(CIgmon.sum\fR\f(CW\fR 4 .IX Item "gmon.sum" خلاصهٔ گراف فراخوانی پویا و پروفایل. .SH "گزارش باگ‌ها (BUGS)" .IX Header "BUGS" میزان دانه‌بندی (granularity) نمونه‌برداری نشان داده می‌شود، اما در بهترین حالت جنبهٔ آماری دارد. ما فرض می‌کنیم که زمان هر بار اجرای یک تابع می‌تواند به‌صورت زمان کل تابع تقسیم بر تعداد دفعات فراخوانی تابع بیان شود. بنابراین، زمانی که در امتداد یال‌های گراف فراخوانی به والدین تابع منتقل می‌شود، مستقیماً متناسب با تعداد دفعاتی است که آن یال پیموده شده است. .PP والدینی که خودشان پروفایل‌سازی نشده‌اند، زمان فرزندان پروفایل‌شده‌شان به آن‌ها منتقل خواهد شد، اما در فهرست گراف فراخوانی چنین به نظر می‌رسند که گویی به‌طور خودبه‌خودی (spontaneous) فراخوانی شده‌اند و زمان آن‌ها فراتر از آن منتقل نخواهد شد. به همین ترتیب، گیرنده‌های سیگنال (signal catchers)، حتی اگر پروفایل شده باشند، خودبه‌خودی به نظر می‌رسند (اگرچه به دلایلی مبهم‌تر). زمان هر فرزند پروفایل‌شدهٔ گیرنده‌های سیگنال باید به‌درستی منتقل شود، مگر این‌که گیرندهٔ سیگنال در حین اجرای روال پروفایل‌سازی فراخوانی شده باشد، که در این حالت همه‌چیز از دست می‌رود. .PP برنامهٔ پروفایل‌شده برای ذخیره اطلاعات ارزیابی عملکرد در فایل \fIgmon.out\fR باید \f(CW\*(C`exit\*(C'\fR(2) را فراخوانی کند یا به‌طور عادی بازگردد (خاتمه یابد). .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\fBmonitor\fR\|(3)، \fBprofil\fR\|(2)، \fBcc\fR\|(1)، \fBprof\fR\|(1) و مدخل Info برای \fIgprof\fR. .PP "An Execution Profiler for Modular Programs", اثر S. Graham، P. Kessler، M. McKusick؛ Software \- Practice and Experience, Vol. 13, pp. 671\-685, 1983. .PP "gprof: A Call Graph Execution Profiler", اثر S. Graham، P. Kessler، M. McKusick؛ Proceedings of the SIGPLAN \*(Aq82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120\-126, June 1982. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" حق نشر (c) 1988\-2025 Free Software Foundation, Inc. .PP اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ ۱.۳ یا هر نسخهٔ بالاترِ منتشرشده توسط بنیاد نرم‌افزار آزاد اعطا می‌شود؛ بدون هیچ بخش تغییرناپذیر، بدون متن‌های روی جلد، و بدون متن‌های پشت جلد. نسخه‌ای از این مجوز در بخش با عنوان «GNU Free Documentation License» گنجانده شده است.