.\" -*- 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 یک نمایه (پروفایل) اجرایی از برنامه‌های 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 مقدار زمان سپری‌شده در هر روتین را محاسبه می‌کند. سپس این زمان‌ها در امتداد یال‌های گراف فراخوانی منتشر می‌شوند. چرخه‌ها شناسایی شده و فراخوانی‌های درون یک چرخه به گونه‌ای تنظیم می‌شوند که در زمان آن چرخه سهیم باشند. .PP چندین ساختار خروجی از این تحلیل در دسترس است. .PP \fIپروفایل تخت\fR (flat profile) نشان می‌دهد که برنامهٔ شما چه مقدار زمان در هر تابع صرف کرده و آن تابع چند بار فراخوانی شده است. اگر فقط می‌خواهید بدانید کدام توابع بیشترین چرخه‌ها را مصرف می‌کنند، در اینجا به‌طور خلاصه بیان شده است. .PP \fIگراف فراخوانی\fR (call graph) برای هر تابع نشان می‌دهد چه توابعی آن را فراخوانی کرده‌اند، آن تابع چه توابع دیگری را فراخوانی کرده و هرکدام چند بار فراخوانی شده‌اند. همچنین تخمینی از میزان زمان سپری‌شده در زیرروال‌های هر تابع ارائه می‌دهد. این گزارش می‌تواند نقاطی را پیشنهاد کند که شاید بتوانید با حذف فراخوانی‌های زمان‌بر، عملکرد را بهبود بخشید. .PP فهرست \fIکد منبع حاشیه‌نویسی‌شده\fR (annotated source) رونوشتی از کد منبع برنامه است که با تعداد دفعات اجرای هر خط از برنامه برچسب‌گذاری شده است. .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 مسیر فایلی است که نگاشت نام تابع به فایل شیء را فراهم می‌سازد. قالب این فایل مشابه خروجی برنامهٔ \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) فایل شیء را بررسی کرده و فراخوانی‌های توابع را در کد ماشین باینری شناسایی می‌کند. از آنجا که رکوردهای معمولی گراف فراخوانی تنها هنگام ورود به توابع ایجاد می‌شوند، این گزینه فرزندانی را شناسایی می‌کند که ممکن بود فراخوانی شوند، اما هرگز فراخوانی نشدند. فراخوانی‌های توابعی که بدون فعال‌بودن پروفایل‌سازی کامپایل شده‌اند نیز شناسایی می‌شوند، اما تنها در صورتی که ورودی‌های جدول نماد (symbol table) برای آن‌ها وجود داشته باشد. فراخوانی‌های روتین‌های کتابخانهٔ پویا معمولاً توسط این گزینه پیدا \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 به شما اجازه می‌دهد هر یالی (arc) را از نمادهای منطبق با مشخصهٔ نماد \fIfrom\fR به نمادهای منطبق با مشخصهٔ نماد \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" این گزینه‌ها با نسخه‌های جدیدتری که از 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" فهرست نام‌ها و فضای متن. .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 والدینی که خودشان پروفایل‌سازی نشده‌اند، زمان فرزندان پروفایل‌شده‌شان به آن‌ها منتشر خواهد شد؛ اما در فهرست گراف فراخوانی به‌نظر می‌رسد که به‌طور خودبه‌خودی فراخوانی شده‌اند و زمان آن‌ها فراتر از آن منتشر نخواهد شد. به‌همین ترتیب، گیرنده‌های سیگنال (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\-2025 Free Software Foundation, Inc. .PP اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ ۱.۳ یا هر نسخهٔ متأخرتری که توسط بنیاد نرم‌افزارهای آزاد منتشر شده باشد، اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.