lazarus/ide/frames/compiler_debugging_options.pas

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.