Difference between revisions of "DWARF"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{DWARF}} DWARF (Debugging With Attributed Record Formats) is one debugging data format. Debugging information is generated by the compiler together with the m...")
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{DWARF}}
 
{{DWARF}}
  
DWARF (Debugging With Attributed Record Formats) is one debugging data format.  
+
= About =
 +
 
 +
'''DWARF''' ('''D'''ebugging '''W'''ith '''A'''ttributed '''R'''ecord '''F'''ormats) is a debugging data format. Dwarf is needed when debugging with [[FpDebug]].  
  
 
Debugging information is generated by the [[Compiler|compiler]] together with the machine code.
 
Debugging information is generated by the [[Compiler|compiler]] together with the machine code.
Line 10: Line 12:
  
 
The FPC provides the following DWARF-compatible debugging information with [[Command-line interface|command line]] [[Command line parameters and environment variables|parameters]]:
 
The FPC provides the following DWARF-compatible debugging information with [[Command-line interface|command line]] [[Command line parameters and environment variables|parameters]]:
* -gw2       Generate DWARFv2 debug information   
+
 
* -gw3       Generate DWARFv3 debug information   
+
* -gw                  Generate DWARFv2 debug information (same as -gw2)
* -gw4       Generate DWARFv4 debug information
+
* -gw2                Generate DWARFv2 debug information   
 +
* -gw2 -godwarfsets    Generate DWARFv2 debug information, but include DWARFv3 description for '''sets''' ("set of SomeEnum").
 +
* -gw3                 Generate DWARFv3 debug information   
 +
* -gw4                 Generate DWARFv4 debug information
 +
 
 +
Missing dwarf-style debugging-data-format will result in a message:
 +
[[File:Enable Dwarf 2 prompt.png|none|left]]
 +
 
 +
= Choosing a DWARF version for Debugging =
 +
 
 +
The Debugger Status page has as overview which versions are supported and recommended: [[Debugger_Status#Debug_Info_Support]]
 +
 
 +
If a project switches between several Debugger Backends, settings should either be adapted or the lowest recommended version should be used.
 +
 
 +
= Differences between versions =
 +
 
 +
Fpc encodes some data types differently depending on the version of DWARF used. This comprises:
 +
- dynamic arrays
 +
- short and long strings
 +
- TObjects
 +
- variants
 +
 
 +
Especially the info for Long/ShortString may affect how different debugger backends display those types.
 +
Long/ShortString do not have their own encoding, they are described as either record, array of char or pchar.
 +
 
 +
== DWARFv2 (with/without sets) ==
 +
 
 +
For GDB "DWARFv2 with sets" is the best option. Testing shows that, if using other (v3 and up) DWARF ('''as generated by FPC''') then GDB is more likely to crash.
 +
 
 +
== DWARFv3 ==
 +
 
 +
DWARFv3 and up, encodes identifiers keeping their case. Instead of "TMYFOOCLASS" the debugger can display "TMyFooClass".
 +
 
 +
 
 +
 
 +
 
 +
[[Category:FPC]]
 +
[[Category:Debugging]]

Revision as of 18:12, 24 January 2022

English (en) suomi (fi)

About

DWARF (Debugging With Attributed Record Formats) is a debugging data format. Dwarf is needed when debugging with FpDebug.

Debugging information is generated by the compiler together with the machine code. Debugging information is read by the debugger. Debugging information is a representation of the relationship between the executable program and the original source code. This information is encoded into a pre-defined format and stored alongside the machine code.

The FPC provides the following DWARF-compatible debugging information with command line parameters:

  • -gw Generate DWARFv2 debug information (same as -gw2)
  • -gw2 Generate DWARFv2 debug information
  • -gw2 -godwarfsets Generate DWARFv2 debug information, but include DWARFv3 description for sets ("set of SomeEnum").
  • -gw3 Generate DWARFv3 debug information
  • -gw4 Generate DWARFv4 debug information

Missing dwarf-style debugging-data-format will result in a message:

Enable Dwarf 2 prompt.png

Choosing a DWARF version for Debugging

The Debugger Status page has as overview which versions are supported and recommended: Debugger_Status#Debug_Info_Support

If a project switches between several Debugger Backends, settings should either be adapted or the lowest recommended version should be used.

Differences between versions

Fpc encodes some data types differently depending on the version of DWARF used. This comprises: - dynamic arrays - short and long strings - TObjects - variants

Especially the info for Long/ShortString may affect how different debugger backends display those types. Long/ShortString do not have their own encoding, they are described as either record, array of char or pchar.

DWARFv2 (with/without sets)

For GDB "DWARFv2 with sets" is the best option. Testing shows that, if using other (v3 and up) DWARF (as generated by FPC) then GDB is more likely to crash.

DWARFv3

DWARFv3 and up, encodes identifiers keeping their case. Instead of "TMYFOOCLASS" the debugger can display "TMyFooClass".