.\" -*- 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 2026-08-11 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 همچنین نسخه‌هایی از توابع کتابخانه‌ای را که برای پروفایل‌سازی کامپایل شده‌اند پیوند می‌دهد. \&\f(CW\*(C`gprof\*(C'\fR فایل شیء مشخص‌شده (پیش‌فرض \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 اختیاری را برای تعیین توابعی که باید گنجانده یا مستثنی شوند دریافت می‌کنند. این گزینه‌ها می‌توانند چندین بار، با مشخصه‌های نماد (\fIsymspec\fR) مختلف، برای گنجاندن یا حذف مجموعه‌هایی از نمادها تعیین شوند. .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 گزینه .B \-A باعث می‌شود \&\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 اگر گزینه .B \-b داده شود، \&\f(CW\*(C`gprof\*(C'\fR توضیحات طولانی و مفصلی را که سعی در تشریح معنای تمام فیلدها در جداول دارند چاپ نمی‌کند. این ویژگی در صورتی مفید است که قصد چاپ خروجی را داشته باشید، یا از دیدن مکرر این توضیحات خسته شده باشید. .ie n .IP """\-B""" 4 .el .IP \f(CW\-B\fR 4 .IX Item "-B" گزینه .B \-B باعث می‌شود \&\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 گزینه .B \-C باعث می‌شود \&\f(CW\*(C`gprof\*(C'\fR شمارش توابع و تعداد دفعاتی را که هر یک فراخوانی شده‌اند چاپ کند. اگر \fIsymspec\fR مشخص شده باشد، شمارش تنها برای نمادهای منطبق چاپ می‌شود. .Sp اگر فایل داده‌های پروفایل شامل رکوردهای شمارش بلوک‌های پایه (basic\-block) باشد، مشخص کردن گزینه .B \-l همراه با .B \-C باعث می‌شود تعداد دفعات اجرای بلوک‌های پایه شمارش شده و به نمایش درآید. .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 گزینه .B \-i باعث می‌شود \&\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 گزینه .B \-I فهرستی از دایرکتوری‌های جستجو را برای یافتن فایل‌های منبع مشخص می‌کند. از متغیر محیطی \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 گزینه .B \-J باعث می‌شود \&\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 به‌طور معمول، نام فایل‌های منبع بدون بخش مسیر چاپ می‌شوند. گزینه .B \-L باعث می‌شود \&\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 گزینه .B \-p باعث می‌شود \&\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 گزینه .B \-P باعث می‌شود \&\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 گزینه .B \-q باعث می‌شود \&\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 گزینه .B \-Q باعث می‌شود \&\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 گزینه .B \-t باعث می‌شود هنگامی که حاشیه‌نویسی منبع فعال است، تعداد \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 جایگزین می‌شود). .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 گزینه .B \-Z باعث می‌شود \&\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 گزینه .B \-\-function\-ordering باعث می‌شود \&\f(CW\*(C`gprof\*(C'\fR ترتیب پیشنهادی توابع را بر اساس داده‌های پروفایل برای برنامه چاپ کند. این گزینه ترتیبی را پیشنهاد می‌کند که ممکن است رفتار صفحه‌بندی (paging)، TLB و کش را برای برنامه در سیستم‌هایی که از ترتیب دلخواه توابع در فایل اجرایی پشتیبانی می‌کنند، بهبود بخشد. .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 گزینه .B \-\-file\-ordering باعث می‌شود \&\f(CW\*(C`gprof\*(C'\fR ترتیب پیشنهادی خط پیوند فایل‌های .o را برای برنامه بر اساس داده‌های پروفایل چاپ کند. این گزینه ترتیبی را پیشنهاد می‌کند که ممکن است رفتار صفحه‌بندی (paging)، TLB و کش را برای برنامه در سیستم‌هایی که از ترتیب دلخواه توابع در فایل اجرایی پشتیبانی نمی‌کنند، بهبود بخشد. .Sp استفاده از آرگومان .B \-a همراه با این گزینه اکیداً توصیه می‌شود. .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، دستوری مشابه زیر را وارد کنید: .br \&\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 گزینه .B \-T باعث می‌شود \&\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 این گزینه تنها بر خروجی منبع حاشیه‌نویسی‌شده تأثیر می‌گذارد. به‌طور پیش‌فرض، تنها خطوط موجود در ابتدای یک بلوک پایه حاشیه‌نویسی می‌شوند. اگر این گزینه مشخص شود، هر خط در یک بلوک پایه با تکرار حاشیه‌نویسی خط اول، حاشیه‌نویسی می‌گردد. این رفتار مشابه گزینه .B \-a در \&\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 می‌تواند برای غیرفعال کردن رمزگشایی به کار رود. کامپایلرهای مختلف سبک‌های درهم‌سازی متفاوتی دارند. آرگومان اختیاری سبک رمزگشایی می‌تواند برای انتخاب سبک مناسب برای کامپایلر شما به کار رود. .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 گزینه .B \-a باعث می‌شود \&\f(CW\*(C`gprof\*(C'\fR از چاپ توابع تعریف‌شده به‌صورت ایستا (خصوصی) خودداری کند. (این‌ها توابعی هستند که نامشان به‌صورت سراسری فهرست نشده و بیرون از فایل/تابع/بلوکی که در آن تعریف شده‌اند قابل مشاهده نیستند.) زمان صرف‌شده در این توابع، فراخوانی‌ها به/از آن‌ها و غیره، همگی به تابعی نسبت داده می‌شوند که مستقیماً پیش از آن در فایل اجرایی بارگذاری شده بود. این گزینه هم بر پروفایل مسطح و هم بر گراف فراخوانی تأثیر می‌گذارد. .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 گزینه .B \-c باعث می‌شود گراف فراخوانی برنامه با یک روش اکتشافی تکمیل شود که فضای متنی فایل شیء را بررسی کرده و فراخوانی‌های توابع در کد ماشین باینری را شناسایی می‌کند. از آنجا که رکوردهای عادی گراف فراخوانی تنها هنگام ورود به توابع تولید می‌شوند، این گزینه فرزندانی را شناسایی می‌کند که امکان داشت فراخوانی شوند، اما هرگز فراخوانی نشدند. فراخوانی‌های توابعی که بدون فعال‌بودن قابلیت پروفایل کامپایل شده‌اند نیز شناسایی می‌شوند، البته تنها در صورتی که ورودی‌های جدول نمادها برای آن‌ها موجود باشد. فراخوانی‌های روتین‌های کتابخانه‌های پویا معمولاً توسط این گزینه پیدا \fIنمی‌شوند\fR. والدین یا فرزندان شناسایی‌شده از طریق این روش اکتشافی، در گراف فراخوانی با تعداد فراخوانی .B 0 نشان داده می‌شوند. .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 گزینه .B \-D باعث می‌شود \&\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" گزینه .B \-k به شما اجازه می‌دهد هر یالی را در گراف فراخوانی از نمادهای منطبق با \fIsymspec from\fR به نمادهای منطبق با \fIsymspec to\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 گزینه .B \-l پروفایل‌سازی خط‌به‌خط را فعال می‌کند، که باعث می‌شود رخدادهای هیستوگرام به خطوط منفرد کد منبع نسبت داده شوند نه توابع. این ویژگی تنها با برنامه‌های کامپایل‌شده با نسخه‌های قدیمی‌تر کامپایلر \&\f(CW\*(C`gcc\*(C'\fR کار می‌کند. نسخه‌های جدیدتر \&\f(CW\*(C`gcc\*(C'\fR طوری طراحی شده‌اند که در عوض با ابزار \&\f(CW\*(C`gcov\*(C'\fR کار کنند. .Sp اگر برنامه با فعال بودن شمارش بلوک‌های پایه کامپایل شده باشد، این گزینه همچنین مشخص می‌کند که هر خط از کد چند بار اجرا شده است. در حالی که پروفایل‌سازی خط‌به‌خط می‌تواند به تفکیک مکانی که برنامه در یک تابع بزرگ وقت خود را سپری می‌کند کمک کند، زمان اجرای \&\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 فایل منبع را بعد از هر نماد، هم در پروفایل مسطح و هم در گراف فراخوانی چاپ کند. اگر همراه با گزینه .B \-L استفاده شود، مسیر کامل فایل چاپ خواهد شد. .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 گزینه .B \-n باعث می‌شود \&\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 گزینه .B \-N باعث می‌شود \&\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 گزینه .B \-S باعث می‌شود \&\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 اگر گزینه .B \-z را مشخص کنید، \&\f(CW\*(C`gprof\*(C'\fR تمام توابع را در پروفایل مسطح ذکر خواهد کرد؛ حتی توابعی که هرگز فراخوانی نشده‌اند و زمانی در آن‌ها صرف نشده است. این ویژگی در ترکیب با گزینه .B \-c برای شناسایی روال‌هایی که هرگز فراخوانی نشده‌اند مفید است. .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 گزینه .B \-d \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 گزینه .B \-h نحوه استفاده از خط فرمان را چاپ می‌کند. .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 گزینه .B \-s باعث می‌شود \&\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 را مجدداً بدون گزینه .B \-s اجرا کنید تا داده‌های تجمیعی در فایل \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 فلگ .B \-v باعث می‌شود \&\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" گزینه .B \-e \fIfunction\fR به \&\f(CW\*(C`gprof\*(C'\fR می‌گوید اطلاعات مربوط به تابع \fIfunction_name\fR (و فرزندان آن...) را در گراف فراخوانی چاپ نکند. این تابع همچنان به‌عنوان فرزند هر تابعی که آن را فراخوانی کند فهرست خواهد شد، اما شماره نمایه آن به‌صورت \fB[not printed]\fR نشان داده می‌شود. ممکن است بیش از یک گزینه .B \-e داده شود؛ با هر گزینه .B \-e تنها یک \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 عمل می‌کند، اما زمان صرف‌شده در تابع (و فرزندانی که از هیچ جای دیگری فراخوانی نشده‌اند)، برای محاسبه درصدهای زمانی گراف فراخوانی استفاده نخواهد شد. ممکن است بیش از یک گزینه .B \-E داده شود؛ با هر گزینه .B \-E تنها یک \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" گزینه .B \-f \fIfunction\fR باعث می‌شود \&\f(CW\*(C`gprof\*(C'\fR گراف فراخوانی را به تابع \fIfunction_name\fR و فرزندان آن (و فرزندان آن‌ها...) محدود کند. ممکن است بیش از یک گزینه .B \-f داده شود؛ با هر گزینه .B \-f تنها یک \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" گزینه .B \-F \fIfunction\fR مانند گزینه \&\f(CW\*(C`\-f\*(C'\fR عمل می‌کند، اما تنها زمان صرف‌شده در تابع و فرزندان آن (و فرزندان آن‌ها...) برای تعیین زمان کل و درصدهای زمانی گراف فراخوانی به کار خواهد رفت. ممکن است بیش از یک گزینه .B \-F داده شود؛ با هر گزینه .B \-F تنها یک \fIfunction_name\fR می‌تواند تعیین شود. گزینه .B \-F بر گزینه .B \-E اولویت دارد و آن را لغو می‌کند. .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" فهرست نام‌ها و فضای متن برنامه. .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)" میزان دقت نمونه‌برداری نشان داده می‌شود، اما در بهترین حالت ماهیت آماری دارد. ما فرض می‌کنیم زمان هر بار اجرای یک تابع را می‌توان با تقسیم زمان کل تابع بر تعداد دفعاتی که تابع فراخوانی شده است بیان کرد. بنابراین زمانی که در امتداد یال‌های گراف فراخوانی به والدین تابع منتقل می‌شود، مستقیماً با تعداد دفعاتی که آن یال پیموده شده تناسب دارد. .PP والدینی که خودشان پروفایل نشده‌اند، زمان فرزندان پروفایل‌شده‌شان به آن‌ها منتقل می‌شود، اما در فهرست گراف فراخوانی به نظر می‌رسد که به‌طور خودبه‌خودی فراخوانی شده‌اند و زمان آن‌ها به سطوح بالاتر منتقل نخواهد شد. به همین ترتیب، گیرنده‌های سیگنال، حتی اگر پروفایل شده باشند، به نظر می‌رسد که خودبه‌خودی هستند (اگرچه به دلایلی مبهم‌تر). هر یک از فرزندان پروفایل‌شده گیرنده‌های سیگنال باید زمان‌هایشان به‌درستی منتقل شود، مگر اینکه گیرنده سیگنال در حین اجرای روتین پروفایل‌سازی فراخوانی شده باشد، که در این صورت تمام اطلاعات از دست می‌رود. .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", by S. Graham, P. Kessler, M. McKusick; Software \- Practice and Experience, Vol. 13, pp. 671\-685, 1983. .PP "gprof: A Call Graph Execution Profiler", by 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" گنجانده شده است.