| 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. | |