q2K BHP
Black History Portal
THE BHP WIRE —
HIDDEN TRUTHS
What's New!
THE JOURNEY THROUGH TIME

Explore Black History

Explore the people, places, events, achievements, struggles and stories that shaped our journey.

✊🏾

Civil Rights

Movements, leaders, victories and the continuing fight for equality.

⚙️

Black Inventors

Innovation, patents, science, technology and world-changing contributions.

🏆

Sports

Pioneers, champions, Negro Leagues, records, activism and excellence.

♟️

People

Meet the people whose lives, choices and achievements shaped the journey.

📍

Places

Black towns, communities, institutions and places where history happened.

📜

Events

Moments that changed communities, movements, institutions and the nation.

Enter a person, place, event, or topic.
MY'STORY

The MOVE Fire

This is a personal recollection on the Move fire on May 13, 1985 Philadelphia police fired thousands of rounds at the MOVE house, city officials approved dropping an explosive device on the roof, the resulting fire was allowed to burn, 11 people—including five children—died, and 61 homes were destroyed. Philadelphia City Council later called it a “brutal attack carried out by the City of Philadelphia on its own citizens” and acknowledged that no individual faced criminal consequences for the bombing. One timeline correction worth preserving for the BHP record: the major previous MOVE-police confrontation was August 8, 1978, about seven years before the bombing, not a year or two earlier. Officer James Ramp was killed, other police and firefighters were wounded, nine MOVE members were later convicted, and television cameras recorded police beating Delbert Africa during his arrest. The 1985 MOVE Commission later specifically criticized city planners for failing to adequately use lessons from that 1978 confrontation. And that actually strengthens the point you’re making: 1985 did not happen without precedent or institutional memory. There had already been a deadly confrontation with MOVE, years of conflict, negotiations and police involvement before Osage Avenue.

MORE →
BLACK FACTS
The Truths They Never Taught You...

The Violence That Helped Spark the NAACP

In August 1908, a white mob attacked Springfield, Illinois’s Black community, destroying homes and businesses and lynching two Black men. National outrage over the violence helped spur the movement that created the NAACP the following year.

MORE →
BHP gathered finds from its connected research sources. Showing the 4 strongest Black History matches.
← BACK TO RESULTS
Wikipedia

Debugging information

Debugging information is information that describes a correspondence of elements in the source code, such as the names of variables and routines, to entities in the object code, which is found in an object file, such as a shared library or an executable. This kind of information allows a symbolic debugger to provide a debugging experience that corresponds more closely to the source code.

The debugging information may be compiled together with the module's binary file, or distributed in a separate file, or simply discarded during the compilation and/or linking.

Because historically such information was associated with the symbol table (which originally was for the translation from exported identifier names to locations in the object file), they also commonly known as debug symbols'. However, most debug information today exists outside of the symbol table, making this largely a misnomer.

This information can be helpful while trying to investigate and fix a crashing application or any other fault.[1] They are also used to provide a view of the program's structure when reverse engineering.

Debugging information

[edit]

Debug symbols can be divided into several levels:

  1. Information usually provided by the symbol table, a translation from names to addresses. For dynamic libraries, the symbol table most include the locations functions and global variables that it expects other programs to use, as otherwise these "exports" would simply be unavailable.
  2. Information necessary for other features such as type introspection (incl. run-time type information) and reflection.
  3. Optional additional information, which may include:
    1. Source code file in which the symbol occurs, as well as the line number at which it is defined.
    2. Data type and size of a symbol.
    3. For custom types such as structs and classes, their names, methods, and members.
    4. Local symbols, usually a mapping from a variable name to a register or a memory location, and their lifetime and scope (block scope or global scope).
    5. Information on exception frames.
    6. The source code itself (found in DWARF 5 and ADATA of § OS/390 et al).

Information of type (3) may be stored in the symbol table of an object file (including executable file or shared library), or may be in a separate file. The other types are required for the functioning of non-debugging features and typically need to stay with the object file.

Debugging information can take up quite a bit of space, especially the filenames and line numbers. Thus, binaries with debugging information can become quite large, often several times the stripped (has its symbols and other debugging information removed) file size.[2] To avoid this extra size, most operating system distributions ship binaries that are stripped, i.e. from which all of the debugging symbols (type (3)) have been removed. This is accomplished, for example, with the strip command in Unix. If the debugging information is in separate files, those files are usually not shipped with the distribution and fetched only when needed.

The strip command only deletes information of types (1) and (3) – the former not always completely as it may also be told to preserve symbols necessary for relocation processing (--strip-unneeded), often found in a dynamic library. Changing the compiler settings may be required for more complete removal: for example, symbol visibility directly affects the size of the symbol table (1), and whether RTTI is enabled on C++ determines whether (2) is produced.[3]

Embedded symbols

[edit]

Unix-like systems

[edit]

stabs was an early format for debugging symbols on Unix-like systems. It worked by encoding extra information into the symbol table as specially-formatted strings and is broadly applicable to many object file formats.

The newer DWARF format, for which formal specifications exist, has largely supplanted it. The specification allows any compatible compiler or assembler to create debug symbols in a standardized format, and for any debugger, such as the GNU Debugger (GDB), to gain access and display these symbols. DWARF is usable on any object format with a concept of named sections.

IBM OS/360 and successors

[edit]

The compilers for the IBM mainframe line descended from the System/360 have a TEST option that causes the compiler to include debugging information[4][5][6] in the object file. Similarly, the Binder and linkage editors have a TEST option that causes the debug information to be retained[7] in the load module. Various debug tools, e.g., OS/360 TESTRAN, TSO TEST, have the ability to use the embedded symbol definitions.

The IBM High Level Assembler (HLASM) supports Generalized Object File Format (GOFF), which includes embedded ADATA.

Windows

[edit]

Windows PE/COFF can use an embedded CodeView format, though in production programs this information is usually extracted to a separate PDB file (see below). PE/COFF can also use a legacy COFF debug info format.[8]

On GNU toolchains, DWARF is used in PE/COFF. This information can, too, be extracted to a PDB file using cv2pdb.

Obsolete formats

[edit]
  • Relocatable Object Module Format (OMF) for Intel x86, the .OBJ files on DOS: debug information encoded as "comments" (obsolete)[9]
  • IEEE-695: outdated format used on the Z80. Uses "comment" fields.[10][11]
  • COFF: Once one of the successors to OMF, has a combination of symbol tables (for identifiers) and annotations in the text segment (for more advanced info).

External debug files

[edit]

OS/390 et al

[edit]

The IBM High Level Assembler (HLASM) and other compilers running on, e.g., z/OS, have an ADATA option that produces an Associated data (ADATA) file[12] containing more information than that produced by the old TEST option. In particular, the ADATA file includes lines of source code and their metadata.

Microsoft debug symbols

[edit]

Microsoft compilers generate a program database (PDB) file containing debug symbols. Some companies ship the PDB on their CD/DVD to enable troubleshooting and other companies (like Microsoft, and the Mozilla Corporation) allow downloading debug symbols from the Internet. The WinDbg debugger and the Visual Studio IDE can be configured to automatically download debug symbols for Windows dynamic-link libraries (DLLs) on demand. The PDB debug symbols that Microsoft distributes include only public functions, global variables and their data types. The Mozilla Corporation has similar infrastructure but distributes full debug information.

There are two branches of the PDB file format for PE/COFF (exe, dll). The closed format is used for files that contain usual machine code. The "open" format is used for files that contain .NET code.

Unix-like systems

[edit]

DWARF may be emitted or extract into a code-less object file that serves as a separate file for debug information. On Linux systems a lookup service is provided by debuginfod.

On Apple platforms, debug symbols are optionally emitted during the build process as dSYM files, which are bundles that contain a Mach-O file with no code but with debug symbols. Apple uses the term "symbolicate" to refer to the replacement of addresses in diagnostic files with human readable values.[13]

In non-machine-code contexts

[edit]

Minification of source code makes it unreadable. A source map, which includes a mapping between the minified entities and the original entities in source code, serves the function of debugging information.

Bytecode formats such as Java and .NET bytecodes can have different amounts of debugging information as well.[14]

History

[edit]

Symbolic debuggers have existed since the mainframe era, almost since the first introduction of suitable computer displays on which to display the symbolic debugging information (and even earlier with symbolic dumps on paper). They were not restricted to high level compiled languages and were available also for assembly language programs. For the IBM/360, these produced object code (on request) that included "SYM cards". These were usually ignored by the program loader but were useful to a symbolic debugger as they were kept on the same program library as the executable logic code.

See also

[edit]

References

[edit]
  1. ^ "Debugging with Symbols". Windows Dev Center. Microsoft. Archived from the original on 2020-01-11. Retrieved 2020-01-11.
  2. ^ "What are Symbols For?". TechNet. Microsoft. 2008-07-15. Archived from the original on 2014-12-26. Retrieved 2015-01-04.
  3. ^ "Binary sizes and RTTI". Sandor Dargo’s Blog. 2023-03-01.
  4. ^ "Appendix D: TESTRAN Editor Input Record Formats" (PDF). IBM System/360 Operating System - TESTRAN - Program Logic Manual - Program Number 3605-PT-516 (PDF). TNL GN26-8016. IBM. 1971-04-01. pp. 119–120. GY28-6611-0. Retrieved 2024-07-11.
  5. ^ "Appendix. Input conventions and Record Formats" (PDF). MVS/370 - Linkage Editor Logic - Data Facility Product 5665-295 - Release 1.0 (PDF) (First ed.). IBM. April 1983. pp. 195–206. LY26-3921-0. Retrieved 2024-07-11.
  6. ^ LY26-3921-0, p. 195, Figure 69. SYM Input Record (Card Image).
  7. ^ LY26-3921-0, p. 199, Figure 76. SYM Record (Load Module).
  8. ^ "Inside Windows: An In-Depth Look into the Win32 Portable Executable File Format, Part 2". learn.microsoft.com.
  9. ^ "OMF: Relocatable Object Module Format" (PDF).
  10. ^ "IEEE-695 Object File Format".
  11. ^ "Deciphering Zilog's LOD file format". www.cocoacrumbs.com. 2023-01-01.
  12. ^ "Appendix C. Associated data file output" (PDF). High Level Assembler for z/OS & z/VM & z/VSE - Programmer's Guide - Version 1 Release 6 (PDF). IBM. 2015. pp. 227–275. SC26-4941-07. Retrieved 2024-07-11.
  13. ^ "Understanding and Analyzing iOS Application Crash Reports". iOS Developer Library. Apple, Inc. 2018-01-08 [2009-01-29]. Technical Note TN2151. Archived from the original on 2019-12-19. Retrieved 2020-01-11.
  14. ^ "Java Deep Dive – class file format for debug information". synyx.de (in German). 2019-03-14.
[edit]

Source: Wikipedia. Article content is retrieved live through the MediaWiki API.

No preview image
Wikipedia

Debugging information

Debugging information is information that describes a correspondence of elements in the source code, such as the names of variables and routines, to entities in the object code, which is found in an object file, such as a shared library or an executable. This kind of information allows a symbolic debugger to provide a debugging experience that corresponds more closely to the source code. The debugging information may be compiled together with the module's binary file, or distributed in a separate file, or simply discarded during the compilation and/or linking. Because historically such information was associated with the symbol table (which originally was for the translation from exported identifier names to locations in the object file), they also commonly known as debug symbols'. However, most debug information today exists outside of the symbol table, making this largely a misnomer. This information can be helpful while trying to investigate and fix a crashing application or any other fault. They are also used to provide a view of the program's structure when reverse engineering.

MORE →
No preview image
Wikipedia

Borland Turbo Debugger

Turbo Debugger (TD) is a machine-level debugger for DOS executables, intended mainly for debugging Borland Turbo Pascal—and later Turbo C—programs, sold by Borland. It is a full-screen debugger displaying both Turbo Pascal or Turbo C source and corresponding assembly-language instructions, with powerful capabilities for setting breakpoints, watching the execution of instructions, monitoring machine registers, etc. Turbo Debugger can be used for programs not generated by Borland compilers, but without showing source statements; it is by no means the only debugger available for non-Borland executables, and not a significant general-purpose debugger. Although Borland's Turbo Pascal has useful single-stepping and conditional breakpoint facilities, the need for a more powerful debugger became apparent when Turbo Pascal started to be used for serious development. Initially, a separate company, TurboPower Software, produced a debugger, T-Debug, and also their Turbo Analyst and Overlay Manager for Turbo Pascal for versions 1 to 3. TurboPower released T-Debug Plus 4.0 for Turbo Pascal 4.0 in 1988, but by then Borland's Turbo Debugger had been announced. The original Turbo Debugger was sold as a stand-alone product introduced in 1989, along with Turbo Assembler and the second version of Turbo C. To use Turbo Debugger with source display, programs, or relevant parts of programs, must be compiled with Turbo Pascal or Turbo C with a conditional directive set to add debugging information to the compiled executable, with related source statements and corresponding machine code. The debugger can then be started (Turbo Debugger does not debug within the development IDE). After debugging the program can be recompiled without debugging information to reduce its size. Later Turbo Debugger, the stand-alone Turbo Assembler (TASM), and Turbo Profiler were included with the compilers in the professional Borland Pascal and Borland C++ versions of the more restricted Turbo Pascal and Turbo C++ suites for DOS. After the popularity of Microsoft Windows ended the era of DOS software development, Turbo Debugger was bundled with TASM for low-level software development. For many years after the end of the DOS era, Borland supplied Turbo Debugger with the last console-mode Borland C++ application development environment, version 5, and with Turbo Assembler 5.0. For many years both of these products were sold even though active development stopped on them. With Borland's reorganization of their development tools as CodeGear, all references to Borland C++ and Turbo Assembler vanished from their web site. The debuggers in later products such as C++Builder and Delphi are based on the Windows debugger introduced with the first Borland C++ and Pascal versions for Windows. The final version of Turbo Debugger came with several versions of the debugger program: TD.EXE was the basic debugger; TD286.EXE runs in protected mode, and TD386.EXE is a virtual debugger which uses the TDH386.SYS device driver to communicate with TD.EXE. The TDH386.SYS driver also adds breakpoints supported in hardware by the 386 and later processors to all three debugger programs. TD386 allows some extra breakpoints that the other debuggers of the era do not (I/O access breaks, ranges greater than 16 bytes, and so on). There is also a debugger for Windows 3.x (TDW.EXE). Remote debugging was supported.

MORE →
Wikipedia

GNU Debugger

The GNU Debugger (GDB) is a portable debugger that runs on many Unix-like systems and works for many programming languages, including Ada, Assembly, C, C++, D, Fortran, Haskell, Go, Objective-C, OpenCL C, Modula-2, Pascal, Rust, and partially others. It detects problems in a program while letting it run and allows users to examine program variables and machine registers.

MORE →
Wikipedia

Software testing

Software testing is the act of checking whether software meets its intended objectives and satisfies expectations. Software testing can provide objective, independent information about the quality of software and the risk of its failure to a user or sponsor or any other stakeholder. Software testing can determine the correctness of software for specific scenarios but cannot determine correctness for all scenarios. It cannot find all bugs. Based on the criteria for measuring correctness from an oracle, software testing employs principles and mechanisms that might recognize a problem. Examples of oracles include specifications, contracts, comparable products, past versions of the same product, inferences about intended or expected purpose, user or customer expectations, relevant standards, and applicable laws. Software testing can be functional or non-functional in nature. Software testing is often dynamic in nature: running the software to verify actual output matches expected. It can also be static in nature: reviewing code and its associated documentation. Software testing is often used to answer the question: Does the software do what it is supposed to do and what it needs to do? Information learned from software testing may be used to improve the process by which software is developed. A commonly suggested approach to automated testing is the "test pyramid," wherein most of the tests are unit tests, followed by a smaller set of integration tests and finally a few end-to-end (e2e) tests.

MORE →
TOPIC OF THE DAY

Greenwood / Black Wall Street

Before the 1921 destruction of Tulsa’s Greenwood District, Black residents had created a remarkable center of business and community life. The district included stores, professional offices, entertainment venues and homes owned by Black citizens. Understanding Greenwood means learning what was built—not only what was burned.

MORE →
TRIVIA QUESTION OF THE DAY

Which heavyweight champion was known as the “Brown Bomber”?

Joe Louis.