.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.47) .\" .\" 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 2026-07-26 binutils-2.47 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 یک نمایه یا پروفایل اجرایی از برنامه‌های 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 خط از فعال‌ترین خطوط در هر فایل منبع فهرست شوند. مقدار پیش‌فرض ۱۰ است. .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 جزئیات دقیق نحوهٔ وادار کردن پیونددهنده به قرار دادن توابع در یک ترتیب خاص، وابسته به سیستم بوده و خارج از دامنهٔ این کتابچهٔ راهنما است. .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 مسیر فایلی است که نگاشت نام تابع به فایل شیء را فراهم می‌سازد. قالب این فایل مشابه خروجی برنامهٔ \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 تنظیم می‌کند. در حال حاضر فقط هنگام چاپ نمایهٔ توابع در پایین نمودار فراخوانی استفاده می‌شود. .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 این گزینه فقط بر خروجی منبع حاشیه‌نویسی‌شده تأثیر می‌گذارد. به‌طور پیش‌فرض، فقط خطوط ابتدای یک بلوک پایه حاشیه‌نویسی می‌شوند. اگر این گزینه مشخص شود، هر خط در یک بلوک پایه با تکرار حاشیه‌نویسی خط اول، حاشیه‌نویسی خواهد شد. این رفتار مشابه \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) شوند یا خیر. حالت پیش‌فرض، بازگردانی نمادها (demangle) است. گزینهٔ \&\f(CW\*(C`\-\-no\-demangle\*(C'\fR می‌تواند برای غیرفعال کردن بازگردانی نام‌ها به کار رود. کامپایلرهای مختلف شیوه‌های درهم‌ریزی (mangling) متفاوتی دارند. از آرگومان اختیاری شیوهٔ بازگردانی (demangling style) می‌توان برای انتخاب شیوهٔ مناسب کامپایلر خود استفاده کرد..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 از چاپ توابعی که به‌صورت ایستا (خصوصی یا static) تعریف شده‌اند خودداری کند. (این‌ها توابعی هستند که نامشان به‌صورت سراسری فهرست نشده و خارج از فایل/تابع/بلوکی که در آن تعریف شده‌اند، قابل مشاهده نیستند.) زمان صرف‌شده در این توابع، فراخوانی‌ها به/از آن‌ها و غیره، همگی به تابعی نسبت داده می‌شوند که در فایل اجرایی مستقیماً پیش از آن بارگذاری شده است. این گزینه هم بر پروفایل تخت (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 counting) کامپایل شده باشد، این گزینه همچنین تعداد دفعاتی را که هر خط از کد اجرا شده است مشخص می‌کند. اگرچه پروفایل‌سازی خط‌به‌خط می‌تواند به جداسازی بخشی از یک تابع بزرگ که برنامه زمان خود را در آن صرف می‌کند کمک کند، اما زمان اجرای \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" این گزینه‌ها با نسخه‌های جدیدتری که از symspecs استفاده می‌کنند جایگزین شده‌اند. .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" فهرست نام‌ها (namelist) و فضای متن. .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 والدینی که خودشان پروفایل‌بندی نشده‌اند، زمان فرزندان پروفایل‌شده‌شان به آن‌ها منتقل می‌شود، اما در فهرست گراف فراخوانی چنین به نظر می‌رسد که به طور خودبه‌خودی فراخوانی شده‌اند و زمان آن‌ها به سطوح بالاتر منتقل نخواهد شد. به همین ترتیب، گیرنده‌های سیگنال (signal catchers)، حتی در صورت پروفایل‌بندی، خودبه‌خودی به نظر خواهند رسید (اگرچه به دلایلی پیچیده‌تر). زمان هر فرزند پروفایل‌شدهٔ گیرنده‌های سیگنال باید به درستی منتقل شود، مگر آنکه گیرندهٔ سیگنال در طول اجرای روال پروفایل‌بندی فراخوانی شده باشد که در این صورت تمام داده‌ها از دست می‌رود. .PP برنامهٔ پروفایل‌شده باید \f(CW\*(C`exit\*(C'\fR(2) را فراخوانی کند یا به طور عادی بازگردد تا اطلاعات پروفایل‌بندی در فایل \fIgmon.out\fR ذخیره شود..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" Copyright (c) 1988\-2026 Free Software Foundation, Inc. .PP اجازهٔ نسخه‌برداری، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ جدیدتر منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متن‌های روی جلد و بدون متن‌های پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان "GNU Free Documentation License" گنجانده شده است.