| What is gprofng? |
| |
| Gprofng is the GNU Next Generation profiler for analyzing the performance |
| of Linux applications. Gprofng allows you to: |
| - Profile C / C++ / Java / Scala applications without needing to recompile |
| - Profile multi-threaded applications |
| - Analyze and compare multiple experiments |
| - Use time-based sampling and / or hardware event counters |
| |
| Building gprofng |
| |
| Gprofng is distributed with binutils. To build gprofng, you build binutils. |
| Overview: |
| 1. Set paths |
| 2. Verify prerequisites |
| 3. Git clone |
| 4. Configure, make, and make install |
| Details follow for each of these. |
| |
| 1. Set paths |
| |
| If you are configuring binutils for the default location, it will use: |
| /usr/local |
| In your shell initialization procedure, set your paths using commands |
| similar to these: |
| export PATH=/usr/local/bin:$PATH |
| export MANPATH=/usr/local/share/man:$MANPATH |
| export INFOPATH=/usr/local/share/info/:$INFOPATH |
| |
| 2. Verify prerequisites |
| |
| To build a recent version of binutils, it is useful to have a developer |
| system with the most recent compilers, libraries, and operating system. |
| Development systems will typically already include most of these: |
| |
| bison bison-devel bzip2 elfutils-debuginfod-client-devel |
| expat-devel flex gcc gcc-c++ git-core git-core-doc gmp-devel |
| help2man libbabeltrace-devel libipt-devel m4 make mpfr-devel |
| ncurses-devel perl-Data-Dumper tar texinfo xz zlib-devel |
| java-17-openjdk-devel |
| |
| CAUTION: The list of prerequisites changes depending on your operating system |
| and changes as binutils evolves. The list above is a snapshot of the useful |
| packages in early 2022 for Red Hat Enterprise Linux and Oracle Linux. |
| |
| Your system may use other packages; for example, you may be able to use a |
| different version of Java than shown above. If there are failures, you may |
| need to search for other packages as described in the "Hints" section below. |
| |
| 3. Git clone |
| |
| Select a binutils repository and a branch that you would like |
| to start from. For example, to clone from the master at |
| sourceware.org, you could say: |
| git clone http://sourceware.org/git/binutils-gdb.git CloneDir |
| |
| 4. Configure, make, and install |
| |
| There are many options for configure (see: configure --help). For example, |
| --prefix sets the destination, as described in the "Hints" section below. |
| If the default destination /usr/local is acceptable for your needs, then |
| after the clone operation finishes, you can simply say: |
| |
| mkdir build |
| cd build |
| ../CloneDir/configure |
| make |
| sudo make install |
| |
| Getting started |
| |
| To start using gprofng, see the tutorial available by saying: |
| info gprofng |
| |
| HTML and PDF documentation |
| |
| You may want to generate an HTML or PDF version of the manual in addition |
| to the above info pages. These versions may be easier to read and easier |
| to search. To generate HTML: |
| |
| cd build # the same build directory you created above |
| cd gprofng/doc |
| make html |
| sudo make install-html |
| |
| If you would like PDF documentation, you will need the texi2dvi utility. |
| If it is not already included in the texinfo package mentioned above, try |
| installing package texinfo-tex. To generate PDF: |
| |
| cd build # the same build directory you created above |
| cd gprofng/doc |
| make pdf |
| sudo make install-pdf |
| |
| Hints and tips for building binutils |
| |
| - Use the script(1) command to write a log of your build. |
| |
| - If you run multiple commands at once (for example: make --jobs=10) then you |
| should also use make option: |
| --output-sync |
| Without --output-sync, the log would be difficult to interpret. |
| |
| - Search the log for errors and warnings, for example: |
| configure: WARNING: <package> is missing or unusable; some features |
| may be unavailable. |
| The above message suggests that <package> may be needed on your system. |
| |
| - Sometimes the above message is not sufficiently specific to guide you to |
| the right package. In the directory where the failure happens, config.log |
| may identify a specific missing file, and your package manager may allow |
| you to search for it. For example, if build/gprofng/config.log shows that |
| javac is missing, and if your package manager is dnf, you could try: |
| dnf --repo='*' whatprovides '*/javac' |
| |
| - You can set a custom destination directory using configure --prefix. |
| This is useful if you prefer not to change /usr/local, or if you are not |
| allowed to do so. If you set a custom prefix, be sure to change all three |
| paths mentioned in the PATH section above. |
| |