@c ----------------------------------------------------------------------------
@c This is the Texinfo source file for the gprofng-collect-app man page.
@c
@c Author: Ruud van der Pas
@c ----------------------------------------------------------------------------
@ifset man
\input texinfo @c -*-texinfo-*-
@setfilename gprofng-collect-app
@settitle Collect performance data for the target application
@include gp-macros.texi
@end ifset

@c ----------------------------------------------------------------------------
@c This is from the man-pages(7) man page
@c
@c "The list below shows conventional or suggested sections.  Most manual pages
@c  should include at least the highlighted sections.  Arrange a new manual
@c  page so that sections are placed in the order shown in the list."
@c
@c              NAME
@c              SYNOPSIS
@c              CONFIGURATION    [Normally only in Section 4]
@c              DESCRIPTION
@c              OPTIONS          [Normally only in Sections 1, 8]
@c              EXIT STATUS      [Normally only in Sections 1, 8]
@c              RETURN VALUE     [Normally only in Sections 2, 3]
@c              ERRORS           [Typically only in Sections 2, 3]
@c              ENVIRONMENT
@c              FILES
@c              VERSIONS         [Normally only in Sections 2, 3]
@c              ATTRIBUTES       [Normally only in Sections 2, 3]
@c              CONFORMING TO
@c              NOTES
@c              BUGS
@c              EXAMPLES
@c              AUTHORS          [Discouraged]
@c              REPORTING BUGS   [Not used in man-pages]
@c              COPYRIGHT        [Not used in man-pages]
@c              SEE ALSO
@c
@c This is what the texi2pod.pl tool recognizes:
@c
@c for $sect (qw(NAME SYNOPSIS TARGET DESCRIPTION OPTIONS ENVIRONMENT FILES
@c               BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
@c
@c What is interesting is that it places "SEE ALSO" before "COPYRIGHT", which
@c makes sense and adhered to for the other formats.
@c ----------------------------------------------------------------------------

@c ----------------------------------------------------------------------------
@c NAME section
@c ----------------------------------------------------------------------------

@ManPageStart{NAME}
@c man begin NAME

gp-collect-app - Collect performance data for the target program

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c SYNOPSIS section
@c ----------------------------------------------------------------------------

@ManPageStart{SYNOPSIS}
@c man begin SYNOPSIS

@command{gprofng collect app} [@var{option(s)}] @var{target}
[@var{target-option(s)}]

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c DESCRIPTION section
@c ----------------------------------------------------------------------------

@ManPageStart{DESCRIPTION}
@c man begin DESCRIPTION

Collect performance data on the target program.  In addition to Program Counter
(PC) sampling, hardware event counters and various tracing options are
supported.

For example, this command collects performance data for an executable called
@samp{a.out} and stores the data collected in an experiment directory with
the name @samp{example.er}.

@smallexample
$ gprofng collect app -o example.er ./a.out
@end smallexample

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c OPTIONS section
@c ----------------------------------------------------------------------------

@ManPageStart{OPTIONS}
@c man begin OPTIONS

@table @gcctabopt

@item --version
@ifclear man
@IndexSubentry{Options, @code{--version}}
@end ifclear

Print the version number and exit.

@item --help
@ifclear man
@IndexSubentry{Options, @code{--help}}
@end ifclear

Print usage information and exit.

@item -v, --verbose
@ifclear man
@IndexSubentry{Options, @code{-v}}
@IndexSubentry{Options, @code{--verbose}}
@end ifclear

By default, verbose mode is disabled.  This option enables it.

@item -p @{off | on | lo[w] | hi[gh] | @var{<value>}@}
@ifclear man
@IndexSubentry{Options, @code{-p}}
@end ifclear

Disable (@samp{off}) or enable (@samp{on}) clock profiling using a default
sampling granularity, or enable clock profiling implicitly by setting the
sampling granularity (@samp{lo[w]}, @samp{hi[gh]}, or a specific value in
ms).  By default, clock profiling is enabled (@samp{-p on}).

@item -h @var{<ctr_def>[,<ctr_def>]}
@ifclear man
@IndexSubentry{Options, @code{-h}}
@end ifclear
Enable hardware event counter profiling and select one or more counter(s).
To see the supported counters on this system, use the @samp{-h} option
without other arguments.

@item -o @var{<exp_name>}
@ifclear man
@IndexSubentry{Options, @code{-o}}
@end ifclear

Specify the name for the experiment directory.  The name has to end with
@samp{.er} and may contain an absolute path (e.g. @file{/tmp/experiment.er}).
An existing experiment with the same name will not be overwritten.

@item -O @var{<exp_name>}
@ifclear man
@IndexSubentry{Options, @code{-O}}
@end ifclear

This is the same as the @samp{-o} option, but unlike this option, silently
overwrites an existing experiment directory with the same name.

@item -C @var{<comment_string>}
@ifclear man
@IndexSubentry{Options, @code{-C}}
@end ifclear

Add up to 10 comment strings to the experiment.  These comments appear in the
notes section of the header and can be retrieved with the
@command{gprofng display text} command using the @samp{-header} option.
@ifclear man
@IndexSubentry{Options, @code{-header}}
@IndexSubentry{Commands, @code{-header}}
@end ifclear

@item -j @{on | off | @var{<path>}@}
@ifclear man
@IndexSubentry{Options, @code{-j}}
@end ifclear

Controls Java profiling when the target is a JVM machine.  The allowed values
for this option are:

@table @gcctabopt

@item on
Record profiling data for the JVM machine, and recognize methods compiled by
the Java HotSpot virtual machine.  Also record Java call stacks.

@item off
Do not record Java profiling data.  Profiling data for native call stacks is
still recorded.

@item @var{<path>}
Records profiling data for the JVM, and use the JVM as installed in
@var{<path>}.

@end table

The default is @samp{-j on}.

@item -J @var{<jvm-option(s)>}
@ifclear man
@IndexSubentry{Options, @code{-J}}
@end ifclear

Specifies one or more additional options to be passed to the JVM used.  The
@var{jvm-option(s)} list must be enclosed in quotation marks if it contains
more than one option.  The items in the list need to be separated by spaces
or tabs.
Each item is passed as a separate option to the JVM.  Note that this option
implies @samp{-j on}.

@item -t @var{<duration>}[m|s]
@ifclear man
@IndexSubentry{Options, @code{-t}}
@end ifclear

Collects data for the specified duration.  The duration can be a single number,
optionally followed by either @samp{m} to specify minutes, or @samp{s} to
specify seconds, which is the default.

The duration can also consists of two numbers separated by a minus (@minus{})
sign.  If a single number is given, data is collected from the start of the run
until the given time.
If two numbers are given, data is collected from the first time to the second.
In case the second time is zero, data is collected until the end of the run.
If two non-zero numbers are given, the first must be less than the second.

@item -n
@ifclear man
@IndexSubentry{Options, @code{-n}}
@end ifclear

This is used for a dry run.  Several run-time settings are displayed, but the
target is not executed and no performance data is collected.

@item -F @{off|on|=@var{regex}@}
@ifclear man
@IndexSubentry{Options, @code{-F}}
@end ifclear

Control whether descendant processes should have their data recorded.
To disable/enable this feature, use @samp{off}/@samp{on}.  Use
@samp{=}@var{regex} to record data on those processes whose executable name
matches the regular expression.  Only the basename of the executable is used,
not the full path.  If spaces or characters interpreted by the shell are used,
enclose the @var{regex} in single quotes.  The default is @samp{-F on}.

@item -a @{off|on|ldobjects|src|usedldobjects|usedsrc@}
@ifclear man
@IndexSubentry{Options, @code{-a}}
@end ifclear

Specify archiving of binaries and other files.  In addition to disable this
feature (@samp{off}), or enable archiving off all loadobjects and sources
(@samp{on}), the other options support a more refined selection.

All of these options enable archiving, but the keyword controls what exactly
is selected: all load objects (ldobjects), all source files (src), the
loadobjects asscoiated with a program counter (usedldobjects), or the source
files associated with a program counter (usedsrc).
The default is @samp{-a ldobjects}.

@item -S @{off|on|@var{<seconds>}@}
@ifclear man
@IndexSubentry{Options, @code{-S}}
@end ifclear

Disable (off), or enable (on) periodic sampling of process-wide
resource utilization.  By default, sampling occurs every second.  Use the
@var{<seconds>} option to change this.  The default is @samp{-S on}.

@item -y @var{<signal>}[,r]
@ifclear man
@IndexSubentry{Options, @code{-y}}
@end ifclear

Controls recording of data with the signal named @var{<signal>}, referred to
as the pause-resume signal.  Whenever the given signal is delivered to the
process, switch between paused (no data is recorded) and resumed (data is
recorded) states.

By default, data collection begins in the paused state.  If the optional
@samp{r} is given, data collection begins in the resumed state and data
collection begins immediately.

SIGUSR1 or SIGUSR2 are recommended for this use, but any signal that is
not used by the target can be used.

@item -l @var{<signal>}
@ifclear man
@IndexSubentry{Options, @code{-l}}
@end ifclear

Specify a signal that will trigger a sample of process-wide resource
utilization.  When the named @var{<signal>} is delivered to the process,
a sample is recorded.

The signal can be specified using the full name, without the initial
letters @code{SIG}, or the signal number.  Note that the @command{kill}
command can be used to deliver a signal.

If both the @samp{-l} and @samp{-y} options are used, the signal must be
different.

@item -s @var{<option>}[,@var{<API>}]
@ifclear man
@IndexSubentry{Options, @code{-s}}
@end ifclear

Enable synchronization wait tracing, where @var{<option>} is used to define the
specifics of the tracing (on, off, @var{<threshold>}, or all).  The API is
selected through the setting for @var{<API>}: @samp{n} selects native/Pthreads,
@samp{j} selects Java, and @samp{nj} selects both.  The default is
@samp{-s off}.

@item -H @{off|on@}
@ifclear man
@IndexSubentry{Options, @code{-H}}
@end ifclear

Disable (off), or enable (on) heap tracing.  The default is @samp{-H off}.

@item -i @{off|on@}
@ifclear man
@IndexSubentry{Options, @code{-i}}
@end ifclear

Disable (off), or enable (on) I/O tracing.  The default is @samp{-i off}.

@end table

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c NOTES section
@c ----------------------------------------------------------------------------

@ManPageStart{NOTES}
@c man begin NOTES

Any executable in the ELF (Executable and Linkable Format) object format can
be used for profiling with gprofng.  If debug information is available,
gprofng can provide more details, but this is not a requirement.

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c SEEALSO section
@c ----------------------------------------------------------------------------

@ManPageStart{SEE ALSO}
@c man begin SEEALSO

gprofng(1),
gprofng-archive(1),
@c -- gprofng-display-gui(1),
gprofng-display-html(1),
gprofng-display-src(1),
gprofng-display-text(1)

@iftex
@vspace{1}
@end iftex

The user guide for gprofng is maintained as a Texinfo manual.  If the
@command{info} and @command{gprofng} programs are correctly installed, the
command @command{info gprofng} should give access to this document.

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c COPYRIGHT section
@c ----------------------------------------------------------------------------

@ManPageStart{COPYRIGHT}
@c man begin COPYRIGHT

Copyright @copyright{} 2022-2024 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled ``GNU Free Documentation License''.

@c man end
@ManPageEnd{}

@c ----------------------------------------------------------------------------
@c If this text is used for a man page, exit.  Otherwise we need to continue.
@c ----------------------------------------------------------------------------

@ifset man
@bye
@end ifset
