vložil Radek Červinka
27. června 2022 23:58
Dlouho jsem nepsal o nějaké fintě pro ladění, tak jsem si vzpomněl na takové dvě drobnosti:
Zobrazení dat z memory stream
Samozřejmě se nejedná jen o memory stream jelikož se jedná o populární bázovou třídu tak to použijeme častěji. Pokud jste v místě, kde máte parametr TStream, není nic jednoduššího než přes volání .ClassName zjistit zda se jedná o potomka TMemoryStreamu, objekt přetypovat a použít následující trik (napadl mne, když jsem ladil volání SOAP a pořád jsem logoval stream do souboru abych ho zkontroloval).
Mějme následující:
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
s: string;
i: int64;
begin
ms := TMemoryStream.Create;
try
s := 'Hastalavista baby';
ms.Write(s[1], Length(s));
i := ms.Size; //<<<<<<<<<<<<<< breakpoint
ShowMessage(IntToStr(i));
finally
ms.Free;
end;
end;
end.
(pokud máme pouze TStream a jedná se o následníka memory stream, tak si pomůžeme přetypováním na TMemoryStream a pak až následující)
Visualizer akceptuje i přetypování na RawByteString
Změna formátu výpisu proměnných
Přiznám se, že tohle jsem nevěděl a je to ostuda. Onehdá jsem potřeboval zobrazit proměnnou jako hexa (přece už nejsem tak šikovný v převodech) a tak jsem se ji snažil zobrazovat přes IntToHex, ale linker funkci vyhodil.
Řešení je následující (stačí stisknout tlačítko Help v tom dialogu) - za proměnnou napsat čárku a formát.