Skip to main content
Redhat Developers  Logo
  • Products

    Platforms

    • Red Hat Enterprise Linux
      Red Hat Enterprise Linux Icon
    • Red Hat AI
      Red Hat AI
    • Red Hat OpenShift
      Openshift icon
    • Red Hat Ansible Automation Platform
      Ansible icon
    • View All Red Hat Products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat Developer Hub
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat OpenShift Local
    • Red Hat Developer Sandbox

      Try Red Hat products and technologies without setup or configuration fees for 30 days with this shared Openshift and Kubernetes cluster.
    • Try at no cost
  • Technologies

    Featured

    • AI/ML
      AI/ML Icon
    • Linux
      Linux Icon
    • Kubernetes
      Cloud icon
    • Automation
      Automation Icon showing arrows moving in a circle around a gear
    • View All Technologies
    • Programming Languages & Frameworks

      • Java
      • Python
      • JavaScript
    • System Design & Architecture

      • Red Hat architecture and design patterns
      • Microservices
      • Event-Driven Architecture
      • Databases
    • Developer Productivity

      • Developer productivity
      • Developer Tools
      • GitOps
    • Automated Data Processing

      • AI/ML
      • Data Science
      • Apache Kafka on Kubernetes
    • Platform Engineering

      • DevOps
      • DevSecOps
      • Ansible automation for applications and services
    • Secure Development & Architectures

      • Security
      • Secure coding
  • Learn

    Featured

    • Kubernetes & Cloud Native
      Openshift icon
    • Linux
      Rhel icon
    • Automation
      Ansible cloud icon
    • AI/ML
      AI/ML Icon
    • View All Learning Resources

    E-Books

    • GitOps Cookbook
    • Podman in Action
    • Kubernetes Operators
    • The Path to GitOps
    • View All E-books

    Cheat Sheets

    • Linux Commands
    • Bash Commands
    • Git
    • systemd Commands
    • View All Cheat Sheets

    Documentation

    • Product Documentation
    • API Catalog
    • Legacy Documentation
  • Developer Sandbox

    Developer Sandbox

    • Access Red Hat’s products and technologies without setup or configuration, and start developing quicker than ever before with our new, no-cost sandbox environments.
    • Explore Developer Sandbox

    Featured Developer Sandbox activities

    • Get started with your Developer Sandbox
    • OpenShift virtualization and application modernization using the Developer Sandbox
    • Explore all Developer Sandbox activities

    Ready to start developing apps?

    • Try at no cost
  • Blog
  • Events
  • Videos

Debuginfo is not just for debugging programs

January 7, 2021
William Cohen
Related topics:
Linux

Share:

    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

    • Why some agentic AI developers are moving code from Python to Rust

    • Confidential VMs: The core of confidential containers

    • Benchmarking with GuideLLM in air-gapped OpenShift clusters

    • Run Qwen3-Next on vLLM with Red Hat AI: A step-by-step guide

    • How to implement observability with Python and Llama Stack

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Products

    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform

    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
    © 2025 Red Hat

    Red Hat legal and privacy links

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

    Report a website issue