mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-09 10:58:14 +02:00
149 lines
4.7 KiB
ObjectPascal
149 lines
4.7 KiB
ObjectPascal
unit compiler_debugging_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
StdCtrls, IDEOptionsIntf, CompilerOptions, CompOptsIntf, LazarusIDEStrConsts;
|
|
|
|
type
|
|
|
|
{ TCompilerLinkingOptionsFrame }
|
|
|
|
TCompilerLinkingOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
chkDebugGDB: TCheckBox;
|
|
chkGenGProfCode: TCheckBox;
|
|
chkSymbolsStrip: TCheckBox;
|
|
chkUseExternalDbgSyms: TCheckBox;
|
|
chkUseHeaptrc: TCheckBox;
|
|
chkUseLineInfoUnit: TCheckBox;
|
|
chkUseValgrind: TCheckBox;
|
|
dropDbgSymbolType: TComboBox;
|
|
grpOtherDebuggingInfo: TGroupBox;
|
|
grpInfoForGDB: TGroupBox;
|
|
lblEmpty: TLabel;
|
|
lblDbgSymbolType: TLabel;
|
|
procedure chkDebugGDBChange(Sender: TObject);
|
|
public
|
|
function GetTitle: string; override;
|
|
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
const
|
|
ST_AUTO_IDX = 0;
|
|
ST_STABS_IDX = 3;
|
|
ST_DWARF2_IDX = 2;
|
|
ST_DWARF2SET_IDX = 1;
|
|
ST_DWARF3_IDX = 4;
|
|
|
|
function SymbolToIndex(SymbolType: TCompilerDbgSymbolType): Integer;
|
|
begin
|
|
case SymbolType of
|
|
dsAuto: Result := ST_AUTO_IDX;
|
|
dsStabs: Result := ST_STABS_IDX;
|
|
dsDwarf2: Result := ST_DWARF2_IDX;
|
|
dsDwarf2Set: Result := ST_DWARF2SET_IDX;
|
|
dsDwarf3: Result := ST_DWARF3_IDX;
|
|
end;
|
|
end;
|
|
|
|
function IndexToSymbol(Index: Integer): TCompilerDbgSymbolType;
|
|
begin
|
|
case Index of
|
|
ST_AUTO_IDX: Result := dsAuto;
|
|
ST_STABS_IDX: Result := dsStabs;
|
|
ST_DWARF2_IDX: Result := dsDwarf2;
|
|
ST_DWARF2SET_IDX: Result := dsDwarf2Set;
|
|
ST_DWARF3_IDX: Result := dsDwarf3;
|
|
end;
|
|
end;
|
|
|
|
{ TCompilerLinkingOptionsFrame }
|
|
|
|
procedure TCompilerLinkingOptionsFrame.chkDebugGDBChange(Sender: TObject);
|
|
begin
|
|
grpInfoForGDB.Enabled := chkDebugGDB.Checked;
|
|
end;
|
|
|
|
function TCompilerLinkingOptionsFrame.GetTitle: string;
|
|
begin
|
|
Result := dlgCODebugging;
|
|
end;
|
|
|
|
procedure TCompilerLinkingOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
// Setup the Linking Tab
|
|
grpInfoForGDB.Caption := dlgCOInfoForGDB;
|
|
grpOtherDebuggingInfo.Caption := dlgCOOtherDebuggingInfo;
|
|
|
|
chkDebugGDB.Caption := dlgCOGDB;
|
|
lblDbgSymbolType.Caption := dlgCOSymbolType;
|
|
dropDbgSymbolType.Items.Clear;
|
|
// Adjust constants above, if re-ordering
|
|
dropDbgSymbolType.Items.Add(dlgCOSymbolTypeAuto+' (-g)'); // 0: automatic
|
|
dropDbgSymbolType.Items.Add(dlgCOSymbolTypeDwarf2Set+ ' (-gw -godwarfsets)'); // 1: dwarf2 + set
|
|
dropDbgSymbolType.Items.Add(dlgCOSymbolTypeDwarf2+ ' (-gw2)'); // 2: dwarf2
|
|
dropDbgSymbolType.Items.Add(dlgCOSymbolTypeStabs+ ' (-gs)'); // 3: stabs
|
|
dropDbgSymbolType.Items.Add(dlgCOSymbolTypeDwarf3+ ' (-gw3)');
|
|
chkUseLineInfoUnit.Caption := dlgLNumsBct + ' (-gl)';
|
|
chkUseHeaptrc.Caption := dlgCOHeaptrc + ' (-gh)';
|
|
chkUseValgrind.Caption := dlgCOValgrind + ' (-gv)';
|
|
chkGenGProfCode.Caption := dlgGPROF + ' (-pg)';
|
|
chkSymbolsStrip.Caption := dlgCOStrip + ' (-Xs)';
|
|
chkUseExternalDbgSyms.Caption := dlgExtSymb + ' (-Xg)';
|
|
end;
|
|
|
|
procedure TCompilerLinkingOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
chkDebugGDB.Checked := GenerateDebugInfo;
|
|
dropDbgSymbolType.ItemIndex := SymbolToIndex(DebugInfoType);
|
|
chkUseLineInfoUnit.Checked := UseLineInfoUnit;
|
|
chkUseHeaptrc.Checked := UseHeaptrc;
|
|
chkUseValgrind.Checked := UseValgrind;
|
|
chkGenGProfCode.Checked := GenGProfCode;
|
|
chkSymbolsStrip.Checked := StripSymbols;
|
|
chkSymbolsStrip.Enabled := NeedsLinkerOpts;
|
|
chkUseExternalDbgSyms.Checked := UseExternalDbgSyms;
|
|
end;
|
|
grpInfoForGDB.Enabled := chkDebugGDB.Checked;
|
|
end;
|
|
|
|
procedure TCompilerLinkingOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
GenerateDebugInfo := chkDebugGDB.Checked;
|
|
DebugInfoType := IndexToSymbol(dropDbgSymbolType.ItemIndex);
|
|
UseLineInfoUnit := chkUseLineInfoUnit.Checked;
|
|
UseHeaptrc := chkUseHeaptrc.Checked;
|
|
UseValgrind := chkUseValgrind.Checked;
|
|
GenGProfCode := chkGenGProfCode.Checked;
|
|
StripSymbols := chkSymbolsStrip.Checked;
|
|
UseExternalDbgSyms := chkUseExternalDbgSyms.Checked;
|
|
end;
|
|
end;
|
|
|
|
class function TCompilerLinkingOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TBaseCompilerOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupCompiler, TCompilerLinkingOptionsFrame,
|
|
CompilerOptionsLinking);
|
|
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerLinkingOptionsFrame,
|
|
CompilerOptionsLinking);
|
|
|
|
end.
|
|
|