IdeDebugger: add Valueformatter CharArrayToString / display an array of char as a string / StopAtNull

This commit is contained in:
Martin 2024-04-18 22:11:00 +02:00
parent bbdfea8977
commit 3ae19dfa25
25 changed files with 175 additions and 9 deletions

View File

@ -412,6 +412,8 @@ resourcestring
ValFormatterCurrencyName = 'Currency'; ValFormatterCurrencyName = 'Currency';
ValFormatterCharArrayToStringName = 'CharArray as String'; ValFormatterCharArrayToStringName = 'CharArray as String';
ValFormatterCharArrayToStringStopNull = 'Stop at #0';
DispFormatDlgBtnCurrent = 'Current'; DispFormatDlgBtnCurrent = 'Current';
DispFormatDlgBtnAll = 'All'; DispFormatDlgBtnAll = 'All';
DispFormatDlgBtnNumber = 'Number'; DispFormatDlgBtnNumber = 'Number';

View File

@ -6,6 +6,7 @@ interface
uses uses
Classes, SysUtils, Classes, SysUtils,
StdCtrls, Forms,
// IdeIntf // IdeIntf
IdeDebuggerValueFormatterIntf, IdeDebuggerWatchValueIntf, IdeDebuggerValueFormatterIntf, IdeDebuggerWatchValueIntf,
// IdeDebugger // IdeDebugger
@ -13,9 +14,25 @@ uses
type type
{ TIdeDebuggerValueFormatterCharArrayToStringFrame }
TIdeDebuggerValueFormatterCharArrayToStringFrame = class(TFrame, ILazDbgIdeValueFormatterSettingsFrameIntf)
cbStopAtNull: TCheckBox;
protected
procedure ReadFrom(AFormatter: ILazDbgIdeValueFormatterIntf);
function WriteTo(AFormatter: ILazDbgIdeValueFormatterIntf): Boolean;
public
constructor Create(TheOwner: TComponent); override;
end;
{ TIdeDbgValueFormatterCharArrayToString } { TIdeDbgValueFormatterCharArrayToString }
TIdeDbgValueFormatterCharArrayToString = class(specialize TLazDbgIdeValueFormatterGeneric<TObject>) TIdeDbgValueFormatterCharArrayToString = class(specialize TLazDbgIdeValueFormatterGeneric<TObject>)
private
FStopAtNull: Boolean;
protected
procedure Init; override;
procedure Assign(AnOther: TObject); override;
public public
class function GetRegisteredDisplayName: String; class function GetRegisteredDisplayName: String;
function FormatValue(AWatchValue: IWatchResultDataIntf; function FormatValue(AWatchValue: IWatchResultDataIntf;
@ -24,16 +41,67 @@ type
): Boolean; override; ): Boolean; override;
function SupportedFeatures: TLazDbgIdeValFormatterFeatures; override; function SupportedFeatures: TLazDbgIdeValFormatterFeatures; override;
function SupportedDataKinds: TWatchResultDataKinds; override; function SupportedDataKinds: TWatchResultDataKinds; override;
published
property StopAtNull: Boolean read FStopAtNull write FStopAtNull;
end; end;
TIdeDbgValueFormatterRegistryCharArrayToString = TIdeDbgValueFormatterRegistryCharArrayToString =
specialize TLazDbgIdeValueFormatterRegistryEntryGeneric<TIdeDbgValueFormatterCharArrayToString>; specialize TLazDbgIdeValueFormatterFrameRegistryEntryGeneric<TIdeDbgValueFormatterCharArrayToString, TIdeDebuggerValueFormatterCharArrayToStringFrame>;
implementation implementation
{$R *.lfm}
{ TIdeDebuggerValueFormatterCharArrayToStringFrame }
procedure TIdeDebuggerValueFormatterCharArrayToStringFrame.ReadFrom(
AFormatter: ILazDbgIdeValueFormatterIntf);
var
f: TIdeDbgValueFormatterCharArrayToString;
begin
f := AFormatter.GetObject as TIdeDbgValueFormatterCharArrayToString;
cbStopAtNull.Checked := f.StopAtNull;
end;
function TIdeDebuggerValueFormatterCharArrayToStringFrame.WriteTo(
AFormatter: ILazDbgIdeValueFormatterIntf): Boolean;
var
f: TIdeDbgValueFormatterCharArrayToString;
begin
f := AFormatter.GetObject as TIdeDbgValueFormatterCharArrayToString;
Result := (f.StopAtNull <> cbStopAtNull.Checked);
f.StopAtNull := cbStopAtNull.Checked;
end;
constructor TIdeDebuggerValueFormatterCharArrayToStringFrame.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
cbStopAtNull.Caption := ValFormatterCharArrayToStringStopNull;
end;
{ TIdeDbgValueFormatterCharArrayToString } { TIdeDbgValueFormatterCharArrayToString }
procedure TIdeDbgValueFormatterCharArrayToString.Init;
begin
inherited Init;
FStopAtNull := False;
end;
procedure TIdeDbgValueFormatterCharArrayToString.Assign(AnOther: TObject);
var
f: TIdeDbgValueFormatterCharArrayToString;
begin
inherited Assign(AnOther);
if AnOther is TIdeDbgValueFormatterCharArrayToString then begin
f := AnOther as TIdeDbgValueFormatterCharArrayToString;
FStopAtNull := f.FStopAtNull;
end;
end;
class function TIdeDbgValueFormatterCharArrayToString.GetRegisteredDisplayName: String; class function TIdeDbgValueFormatterCharArrayToString.GetRegisteredDisplayName: String;
begin begin
Result := ValFormatterCharArrayToStringName; Result := ValFormatterCharArrayToStringName;
@ -68,32 +136,36 @@ begin
1: begin 1: begin
SetLength(APrintedValue, Cnt); SetLength(APrintedValue, Cnt);
p := @APrintedValue[1]; p := @APrintedValue[1];
p^ := AElem.AsString[1]; i := 0;
i := 1;
while i < Cnt do begin while i < Cnt do begin
AWatchValue.SetSelectedIndex(i); AWatchValue.SetSelectedIndex(i);
AElem := AWatchValue.SelectedEntry; AElem := AWatchValue.SelectedEntry;
inc(p);
p^ := AElem.AsString[1]; p^ := AElem.AsString[1];
if StopAtNull and (p^ = #0) then
break;
inc(p);
inc(i); inc(i);
end; end;
if i < Cnt then
SetLength(APrintedValue, i);
APrintedValue := QuoteText(APrintedValue); APrintedValue := QuoteText(APrintedValue);
end; end;
2: begin 2: begin
SetLength(AWideValue, Cnt); SetLength(AWideValue, Cnt);
pw := @AWideValue[1]; pw := @AWideValue[1];
pw^ := AElem.AsWideString[1]; i := 0;
i := 1;
while i < Cnt do begin while i < Cnt do begin
AWatchValue.SetSelectedIndex(i); AWatchValue.SetSelectedIndex(i);
AElem := AWatchValue.SelectedEntry; AElem := AWatchValue.SelectedEntry;
pw^ := AElem.AsWideString[1];
if StopAtNull and (pw^ = #0) then
break;
inc(pw); inc(pw);
pw^ := AElem.AsString[1];
inc(i); inc(i);
end; end;
if i < Cnt then
SetLength(AWideValue, i);
APrintedValue := QuoteWideText(AWideValue); APrintedValue := QuoteWideText(AWideValue);
end; end;

View File

@ -1708,6 +1708,10 @@ msgstr ""
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1703,6 +1703,10 @@ msgstr ""
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1725,6 +1725,10 @@ msgstr ""
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1755,6 +1755,10 @@ msgstr "Přepnout záložku"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1750,6 +1750,10 @@ msgstr "Haltepunkt umschal&ten"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1760,6 +1760,10 @@ msgstr "Ac&tivar/desactivar Punto de Interrupción"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1748,6 +1748,10 @@ msgstr "&Keskeytyskohta päälle/pois"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1755,6 +1755,10 @@ msgstr "&Inverser le point d'arrêt"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1789,6 +1789,10 @@ msgstr "החלף נקודת עצירה"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1755,6 +1755,10 @@ msgstr "Töréspont ki-/&bekapcsolása"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1732,6 +1732,10 @@ msgstr ""
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1760,6 +1760,10 @@ msgstr "&Inverti breakpoint"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1758,6 +1758,10 @@ msgstr "ブレークポイントの切り替え(&B)"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1758,6 +1758,10 @@ msgstr "Įjungti ar išjungti stabd&os tašką"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1728,6 +1728,10 @@ msgstr ""
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1771,6 +1771,10 @@ msgstr "&Przełącz pułapkę"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1727,6 +1727,10 @@ msgstr ""
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1770,6 +1770,10 @@ msgstr "&Alternar pontos de parada"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1740,6 +1740,10 @@ msgstr "П&ереключить точку останова"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "TColor" msgstr "TColor"

View File

@ -1744,6 +1744,10 @@ msgstr "Prepnúť &bod prerušenia"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1750,6 +1750,10 @@ msgstr "Kesme &noktası değiştir"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1748,6 +1748,10 @@ msgstr "Перемкнути &точку зупинки"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""

View File

@ -1746,6 +1746,10 @@ msgstr "切换断点(&B)"
msgid "CharArray as String" msgid "CharArray as String"
msgstr "" msgstr ""
#: idedebuggerstringconstants.valformatterchararraytostringstopnull
msgid "Stop at #0"
msgstr ""
#: idedebuggerstringconstants.valformattercolorname #: idedebuggerstringconstants.valformattercolorname
msgid "TColor" msgid "TColor"
msgstr "" msgstr ""