Show Table of Contents Hide Table of Contents English 日本語 English Multi-page HTML Single-page HTML PDF ePub Developer GuidePrefaceI. Setting Up a Development Workstation1. Installing the Operating System2. Setting up to Manage Application Versions3. Setting up to Develop Applications Using C and C++4. Setting up to Debug Applications5. Setting up to Measure Performance of Applications6. Setting up to Develop Applications Using Java7. Setting up to Develop Applications Using Python8. Setting up to Develop Applications Using C# and .NET Core9. Setting up to Develop Containerized Applications10. Setting up to Develop Web ApplicationsII. Collaborating on Applications with Other Developers11. Using GitIII. Making an Application available to Users12. Distribution Options13. Creating a Container with an Application14. Containerizing an Application from PackagesIV. Creating C or C++ Applications15. Building Code with GCC15.1. Relationship between Code Forms15.2. Compiling Source Files to Object Code15.3. Enabling Debugging of C and C++ Applications with GCC15.4. Code Optimization with GCC15.5. Hardening Code with GCC15.6. Linking Code to Create Executable Files15.7. C++ Compatibility of Various Red Hat Products15.8. Example: Building a C Program with GCC15.9. Example: Building a C++ Program with GCC16. Using Libraries with GCC16.1. Library Naming Conventions16.2. Static and dynamic linking16.3. Using a Library with GCC16.4. Using a Static Library with GCC16.5. Using a Dynamic Library with GCC16.6. Using Both Static and Dynamic Libraries with GCC17. Creating libraries with GCC17.1. Library Naming Conventions17.2. The soname Mechanism17.3. Creating Dynamic Libraries with GCC17.4. Creating Static Libraries with GCC and ar18. Managing More Code with Make18.1. GNU make and Makefile Overview18.2. Example: Building a C Program Using a Makefile18.3. Documentation Resources for make19. Using the Eclipse IDE for C and C++ Application DevelopmentV. Debugging Applications20. Debugging a Running Application20.1. Enabling Debugging with Debugging Information20.1.1. Debugging Information20.1.2. Enabling Debugging of C and C++ Applications with GCC20.1.3. Debuginfo Packages20.1.4. Getting debuginfo Packages for an Application or Library using GDB20.1.5. Getting debuginfo Packages for an Application or Library Manually20.2. Inspecting Application Internal State with GDB20.2.1. GNU Debugger (GDB)20.2.2. Attaching GDB to a Process20.2.3. Stepping through Program Code with GDB20.2.4. Showing Program Internal Values with GDB20.2.5. Using GDB Breakpoints to Stop Execution at Defined Code Locations20.2.6. Using GDB Watchpoints to Stop Execution on Data Access and Changes20.2.7. Debugging Forking or Threaded Programs with GDB20.3. Recording Application Interactions20.3.1. Tools Useful for Recording Application Interactions20.3.2. Monitoring an Application’s System Calls with strace20.3.3. Monitoring Application’s Library Function Calls with ltrace20.3.4. Monitoring Application’s System Calls with SystemTap20.3.5. Using GDB to Intercept Application System Calls20.3.6. Using GDB to Intercept Handling of Signals by Applications21. Debugging a Crashed Application21.1. Core Dumps21.2. Recording Application Crashes with Core Dumps21.3. Inspecting Application Crash States with Core Dumps21.4. Dumping Process Memory with gcore21.5. Dumping Protected Process Memory with GDBVI. Monitoring Performance22. Valgrind22.1. Valgrind Tools22.2. Using Valgrind22.3. Additional information23. OProfile23.1. Using OProfile23.2. OProfile Documentation24. SystemTap24.1. Additional Information25. Performance Counters for Linux (PCL) Tools and perf25.1. Perf Tool Commands25.2. Using PerfA. Revision HistoryLegal Notice Preface This document describes the different features and utilities that make Red Hat Enterprise Linux 7 an ideal enterprise platform for application development. Developer Guide I. Setting Up a Development Workstation Where did the comment section go?Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.