Civil Rights
Movements, leaders, victories and the continuing fight for equality.
Explore the people, places, events, achievements, struggles and stories that shaped our journey.
Movements, leaders, victories and the continuing fight for equality.
Innovation, patents, science, technology and world-changing contributions.
Pioneers, champions, Negro Leagues, records, activism and excellence.
Meet the people whose lives, choices and achievements shaped the journey.
Black towns, communities, institutions and places where history happened.
Moments that changed communities, movements, institutions and the nation.
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 →Reflects the personal views, recollections, and perspective of the author, Mike Davis.
This is a personal recollection on the Move fire on May 13, 1985
This article needs more citations. (December 2013) |
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.
Debug symbols can be divided into several levels:
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]
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.
This section needs expansion. You can help by adding missing information. (July 2024) |
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 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.
This section needs expansion. You can help by adding missing information. (July 2024) |
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 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.
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]
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]
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.
Source: Wikipedia. Article content is retrieved live through the MediaWiki API.
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.
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.
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.
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.
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 →Joe Louis.