mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-02 22:43:41 +02:00
191 lines
6.3 KiB
ObjectPascal
191 lines
6.3 KiB
ObjectPascal
unit compiler_debugging_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
// LCL
|
|
StdCtrls,
|
|
// LazUtils
|
|
LazLoggerBase,
|
|
// IdeIntf
|
|
IDEOptionsIntf, IDEOptEditorIntf, CompOptsIntf,
|
|
// IDE
|
|
CompilerOptions, LazarusIDEStrConsts;
|
|
|
|
type
|
|
|
|
{ TCompilerDebuggingOptionsFrame }
|
|
|
|
TCompilerDebuggingOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
chkRunWithDebug: TCheckBox;
|
|
chkChecksIO: TCheckBox;
|
|
chkChecksOverflow: TCheckBox;
|
|
chkChecksRange: TCheckBox;
|
|
chkChecksStack: TCheckBox;
|
|
chkDebugGDB: TCheckBox;
|
|
chkGenGProfCode: TCheckBox;
|
|
chkSymbolsStrip: TCheckBox;
|
|
chkUseExternalDbgSyms: TCheckBox;
|
|
chkUseHeaptrc: TCheckBox;
|
|
chkTrashVariables: TCheckBox;
|
|
chkUseLineInfoUnit: TCheckBox;
|
|
chkUseValgrind: TCheckBox;
|
|
chkVerifyObjMethodCall: TCheckBox;
|
|
chkAssertion: TCheckBox;
|
|
dropDbgSymbolType: TComboBox;
|
|
grpChecks: TGroupBox;
|
|
grpOtherDebuggingInfo: TGroupBox;
|
|
grpInfoForGDB: TGroupBox;
|
|
lblDbgSymbolType: TLabel;
|
|
procedure chkDebugGDBChange(Sender: TObject);
|
|
public
|
|
function GetTitle: string; override;
|
|
procedure Setup({%H-}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;
|
|
|
|
{ TCompilerDebuggingOptionsFrame }
|
|
|
|
procedure TCompilerDebuggingOptionsFrame.chkDebugGDBChange(Sender: TObject);
|
|
begin
|
|
grpInfoForGDB.Enabled := chkDebugGDB.Checked;
|
|
end;
|
|
|
|
function TCompilerDebuggingOptionsFrame.GetTitle: string;
|
|
begin
|
|
Result := dlgCODebugging;
|
|
end;
|
|
|
|
procedure TCompilerDebuggingOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
grpChecks.Caption := dlgCOChecksAndAssertion;
|
|
chkChecksIO.Caption := 'I/O (-Ci)';
|
|
chkChecksRange.Caption := dlgCORange + ' (-Cr)';
|
|
chkChecksOverflow.Caption := dlgCOOverflow + ' (-Co)';
|
|
chkChecksStack.Caption := dlgCOStack + ' (-Ct)';
|
|
chkVerifyObjMethodCall.Caption := lisVerifyMethodCalls + ' (-CR)';
|
|
chkAssertion.Caption := dlgAssertCode + ' (-Sa)';
|
|
|
|
grpInfoForGDB.Caption := dlgCOInfoForGDB;
|
|
grpOtherDebuggingInfo.Caption := dlgCOOtherDebuggingInfo;
|
|
|
|
chkDebugGDB.Caption := dlgCOGDB;
|
|
chkRunWithDebug.Caption := dlgRunWithDebug;
|
|
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)';
|
|
chkUseValgrind.Caption := dlgCOValgrind + ' (-gv)';
|
|
chkUseExternalDbgSyms.Caption := dlgExtSymb + ' (-Xg)';
|
|
chkUseHeaptrc.Caption := dlgCOHeaptrc + ' (-gh)';
|
|
chkTrashVariables.Caption := dlgCOTrashVariables + ' (-gt)';
|
|
chkGenGProfCode.Caption := dlgGPROF + ' (-pg, '+lisOnly32bit+')';
|
|
chkSymbolsStrip.Caption := dlgCOStrip + ' (-Xs)';
|
|
end;
|
|
|
|
procedure TCompilerDebuggingOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
chkChecksIO.Checked := IOChecks;
|
|
chkChecksRange.Checked := RangeChecks;
|
|
chkChecksOverflow.Checked := OverflowChecks;
|
|
chkChecksStack.Checked := StackChecks;
|
|
chkVerifyObjMethodCall.Checked := VerifyObjMethodCall;
|
|
chkAssertion.Checked := IncludeAssertionCode;
|
|
|
|
chkDebugGDB.Checked := GenerateDebugInfo;
|
|
chkRunWithDebug.Checked := not RunWithoutDebug;
|
|
dropDbgSymbolType.ItemIndex := SymbolToIndex(DebugInfoType);
|
|
chkUseLineInfoUnit.Checked := UseLineInfoUnit;
|
|
chkUseValgrind.Checked := UseValgrind;
|
|
chkUseExternalDbgSyms.Checked := UseExternalDbgSyms;
|
|
chkUseHeaptrc.Checked := UseHeaptrc;
|
|
chkTrashVariables.Checked := TrashVariables;
|
|
chkGenGProfCode.Checked := GenGProfCode;
|
|
chkSymbolsStrip.Checked := StripSymbols;
|
|
chkSymbolsStrip.Enabled := NeedsLinkerOpts;
|
|
end;
|
|
grpInfoForGDB.Enabled := chkDebugGDB.Checked;
|
|
end;
|
|
|
|
procedure TCompilerDebuggingOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
IOChecks := chkChecksIO.Checked;
|
|
RangeChecks := chkChecksRange.Checked;
|
|
OverflowChecks := chkChecksOverflow.Checked;
|
|
StackChecks := chkChecksStack.Checked;
|
|
VerifyObjMethodCall := chkVerifyObjMethodCall.Checked;
|
|
IncludeAssertionCode := chkAssertion.Checked;
|
|
|
|
GenerateDebugInfo := chkDebugGDB.Checked;
|
|
RunWithoutDebug := not chkRunWithDebug.Checked;
|
|
DebugInfoType := IndexToSymbol(dropDbgSymbolType.ItemIndex);
|
|
UseLineInfoUnit := chkUseLineInfoUnit.Checked;
|
|
UseValgrind := chkUseValgrind.Checked;
|
|
UseExternalDbgSyms := chkUseExternalDbgSyms.Checked;
|
|
UseHeaptrc := chkUseHeaptrc.Checked;
|
|
TrashVariables := chkTrashVariables.Checked;
|
|
GenGProfCode := chkGenGProfCode.Checked;
|
|
StripSymbols := chkSymbolsStrip.Checked;
|
|
end;
|
|
end;
|
|
|
|
class function TCompilerDebuggingOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TBaseCompilerOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupCompiler, TCompilerDebuggingOptionsFrame,
|
|
CompilerOptionsDebugging);
|
|
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerDebuggingOptionsFrame,
|
|
CompilerOptionsDebugging);
|
|
|
|
end.
|
|
|