Skip to main content
Redhat Developers  Logo
  • AI

    Get started with AI

    • Red Hat AI
      Accelerate the development and deployment of enterprise AI solutions.
    • AI learning hub
      Explore learning materials and tools, organized by task.
    • AI interactive demos
      Click through scenarios with Red Hat AI, including training LLMs and more.
    • AI/ML learning paths
      Expand your OpenShift AI knowledge using these learning resources.
    • AI quickstarts
      Focused AI use cases designed for fast deployment on Red Hat AI platforms.
    • No-cost AI training
      Foundational Red Hat AI training.

    Featured resources

    • OpenShift AI learning
    • Open source AI for developers
    • AI product application development
    • Open source-powered AI/ML for hybrid cloud
    • AI and Node.js cheat sheet

    Red Hat AI Factory with NVIDIA

    • Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments.
    • Explore the solution
  • Learn

    Self-guided

    • Documentation
      Find answers, get step-by-step guidance, and learn how to use Red Hat products.
    • Learning paths
      Explore curated walkthroughs for common development tasks.
    • Guided learning
      Receive custom learning paths powered by our AI assistant.
    • See all learning

    Hands-on

    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.
    • Interactive labs
      Learn by doing in these hands-on, browser-based experiences.
    • Interactive demos
      Click through product features in these guided tours.

    Browse by topic

    • AI/ML
    • Automation
    • Java
    • Kubernetes
    • Linux
    • See all topics

    Training & certifications

    • Courses and exams
    • Certifications
    • Skills assessments
    • Red Hat Academy
    • Learning subscription
    • Explore training
  • Build

    Get started

    • Red Hat build of Podman Desktop
      A downloadable, local development hub to experiment with our products and builds.
    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.

    Download products

    • Access product downloads to start building and testing right away.
    • Red Hat Enterprise Linux
    • Red Hat AI
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat Developer Toolset

    References

    • E-books
    • Documentation
    • Cheat sheets
    • Architecture center
  • Community

    Get involved

    • Events
    • Live AI events
    • Red Hat Summit
    • Red Hat Accelerators
    • Community discussions

    Follow along

    • Articles & blogs
    • Developer newsletter
    • Videos
    • Github

    Get help

    • Customer service
    • Customer support
    • Regional contacts
    • Find a partner

    Join the Red Hat Developer program

    • Download Red Hat products and project builds, access support documentation, learning content, and more.
    • Explore the benefits

Debuginfo is not just for debugging programs

January 7, 2021
William Cohen
Related topics:
Linux

    For a long time at Red Hat, all executables in RPMs were built with debuginfo enabled. While this practice makes it easier for people in support to investigate issues reported using tools such as GDB and crash, there are other important non-debugging uses for the resulting debuginfo.

    Debuginfo was named for its initial use. Over time, other applications (such as application binary interface [ABI] compliance checking, data struct layout analysis, and performance monitoring) that use the same information needed for debugging have been developed. It is best to think of the debuginfo as mapping information between the executable that compilers generate and the source code that developers write. It helps humans get crucial information to better understand the executable code actually running their systems, and provides a means of double-checking the compiler's and the developers' work.

    Application binary interface (ABI) checking

    Currently, on Linux, very few applications are monolithic stand-alone binaries. Most binaries make extensive use of shared libraries to leverage the work of other projects and reduce the size of executables. However, for this practice to work, the application binary interfaces (ABIs) provided by the libraries need to be stable. It would be horrible if a Linux distribution updated a shared library used by an application and suddenly the application stopped working as a result. Tools such as libabigail compare different versions of a shared library to detect any changes in the ABI.

    These ABI checking tools use the debuginfo to determine which functions are available, the functions' return types, the arguments being passed into the functions, and the data layout of those various types. The debuginfo is a machine-readable mechanism to verify that the ABI has not changed. Without the debuginfo, these checks would not be feasible.

    For distributions such as Red Hat Enterprise Linux and Fedora, these ABI checks are essential. ABI checks are done comparing the newer candidate build of packages to previous builds to ensure ABI compatibility. This ensures that other software that relies on those packages will continue to function.

    Data structure layout analysis

    The compiler might insert padding in data structures to ensure that the data structures do not violate the alignment constraints of the target computer architecture. This padding wastes memory. When developers create data structures, they might not be aware of the alignment constraints. Also, there might be different alignment constraints used for certain compiler options and other target processors.

    Tools such as pahole in the dwarves package reads the debuginfo describing the data structures and determines where padding has been added. Even on machines with gigabytes of RAM, there can be a great desire to more efficiently organize the data structures to avoid wasting space.

    Performance monitoring

    One might want to provide feedback on a program's operation in production. This information can provide a baseline of how the program normally operates. It can also provide insights into which areas of the program consume too much time and could be made more efficient. Periodic sampling of the program counter by perf is a common way of estimating the time spent in various areas of program. However, just having raw samples of program addresses and bytes from the program stack is not useful for developers. Developers want stack backtraces so they can produce flame graphs and be able to determine which areas of the source code they need to revise to improve performance of future versions of the software.

    Keep the debuginfo information handy

    These non-debugging uses of the debuginfo can help improve code quality by catching unexpected changes in ABI, unexpected wasted space in data structures, and unexpected inefficient sections of code. The debuginfo does take up space, but there are methods to strip that information from binaries and place it elsewhere so the default binaries are not any larger than binaries compiled without the debuginfo. Thus, it is best to default to compiling code with debuginfo enabled.

    Last updated: January 6, 2021

    Recent Posts

    • Protect data offloaded to GPU-accelerated environments with OpenShift sandboxed containers

    • Case study: Measuring energy efficiency on the x64 platform

    • How to prevent AI inference stack silent failures

    • Preventing GPU waste: A guide to JIT checkpointing with Kubeflow Trainer on OpenShift AI

    • How to manage TLS certificates used by OpenShift GitOps operator

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Platforms

    • Red Hat AI
    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Build

    • Developer Sandbox
    • Developer tools
    • Interactive tutorials
    • API catalog

    Quicklinks

    • Learning resources
    • E-books
    • Cheat sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site status dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2026 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Chat Support

    Please log in with your Red Hat account to access chat support.