![]() |
Große Strings im Debugger
Schon
![]()
Delphi-Quellcode:
oder
meinGedöns.ToJson()
Delphi-Quellcode:
kommt.
.ToXML()
Klar kann ich das im Debugger in der Watch-List anzeigen, und er zeigt mir die ersten paar hundert Zeichen an. Aber wenn ich wirklich den kompletten String haben möchte, wie komme ich da dran? Ist ja wirklich heute nichts ungewöhnliches mehr, dass ein String etwas länger wird. |
AW: Große Strings im Debugger
Geht es nur ums reingucken, oder auch ums rauskopieren?
Wenn Ersteres, dann den langen String als StringList oder StringArray im Debugger ausgeben. (lange Zeile in mehrere Kürzere aufgeteilt) ![]() Das ginge sofort und ohne Änderungen/Erweiterungen. Ansonsten könntest du dir auch einen passenden DebugViewer basteln. (glaub da gab es sogar Beispiele/Tutorial hier im Forum) Per se ist es ja OK, dass Strings/Daten (erstmal) gekürtzt ausgegeben werden, damit es nicht zu langsam/aufwändig wird, aber es wäre schon toll, wenn man dann dennoch eine Möglichkeit hätte mehr/alles zu laden. PS: Genauso nervig ist es, dass der Stacktrace gern mal abbricht. Beim letzten Stackoverflow hätte ich gern gewusst wo der Ursprung ist. (wobei es hier ja ein leichtes wäre einfach in der Mitte was wegzulassen, anstatt das ganze Ende Anfang) |
AW: Große Strings im Debugger
Im Endeffekt natürlich ums Rauskopieren, denn ich untersuche eine 5000 Zeilen lange, unformatierte JSON sicher nicht im dem kleinen Textfenster im Debugger.
|
AW: Große Strings im Debugger
Delphi-Quellcode:
So?
Clipboard.AsText := MeinString;
Oder eine Methode schreiben, die einen String schreibt:
Delphi-Quellcode:
procedure SaveStringToFile(const s: string; const fn: TFileName; const Encoding: TEncoding; const BOM: Boolean);
var ss: TStringStream; begin ss := TStringStream.Create(IfThen(BOM and not Encoding.IsSingleByte, #$FEFF) + s, Encoding, False); // BOM nicht bei SingleByteEncodings (das ist alles außer ASCII und Default) try ss.SaveToFile(fn); finally ss.Free; end; end; |
AW: Große Strings im Debugger
Zitat:
![]() Dann kann man bei Auswerten/Ändern z.B.
Delphi-Quellcode:
eingeben und auf Auswerten klicken. Dazu muss im aktuellen Scope dann aber auch System.IOUtils in der uses stehen.
TFile.WriteAllText('c:\temp\dump.txt', MeinString)
Alternativ könnte man sich auch einen
Delphi-Quellcode:
schreiben mit einer
record helper for string
Delphi-Quellcode:
Methode. Aber das ist wegen des Highlander Prinzips bei Helpern nicht so schön.
CopyToClipboard
|
AW: Große Strings im Debugger
Jupp, wollte ich auch grade vorschlagen, da etwas schreiben zu lassen.
Nicht den Haken bei "Seiteneffekte zulassen" vergessen, bzw. diese Funktion standardmäßig in den IDE-Optionen aktivieren. Zitat:
Und ich hatte da auch grade den anderen Fall. Vom Highlander war nichts verfügbar, nur von dem was eigentlich vorher da war. (lokaler Helper in der Implemtation ... lief jahrelang, bis jetzt ein Helper über die Uses rein kam und plötzlich war vom lokalen Helper nichts mehr nutzbar ... nichtmal Helper-Vererbung half) |
AW: Große Strings im Debugger
Ich weiß nicht, ob ich deine Frage richtig verstanden haben. Ich würde es einfach loggen. Mit mORMot geht es einfach. Das Limit z.B. für Log() kannst du selbst festlegen. Die Vorgabe ist MaxInt. Einfaches Beispiel:
Delphi-Quellcode:
Bis bald...
var
logFamily: TSynLogFamily; begin logFamily := TSynLog.Family; logFamily.Level := LOG_VERBOSE; logFamily.PerThreadLog := ptIdentifiedInOneFile; logFamily.HighResolutionTimestamp := True; Application.Initialize; ... uses mormot.core.base, mormot.core.buffers, mormot.core.unicode, mormot.core.log, mormot.crypt.core; procedure TfrmMain.FormCreate(Sender: TObject); var log: ISynLog; text: RawUtf8; begin log := TSynLog.Enter(Self); text := BinToBase64(TAesPrng.Main.FillRandom(20 shl 20)); log.Log(sllInfo, text); end; Thomas |
AW: Große Strings im Debugger
Zitat:
|
AW: Große Strings im Debugger
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Große Strings im Debugger
Hallo,
wenn man wärend des Debugens an einer Stelle den Inhalt eines langen Strings haben will, dann Start -> Auswerten/Ändern,
Delphi-Quellcode:
eingeben und Ausführen. Die erste Zahl entsprechen erhöhen und nochmal. Die Grenze bei Strings im Debugger ist 2k.
Copy(<Variable>, 1, 2000)
|
AW: Große Strings im Debugger
Zitat:
die Grenze "eines" Strings, aber da wird deine Lösung ihn noch mehr nerven, da er jeden Teilstring manuell auswählen muß. Bei meinem Vorschlag, hat man insgesamt den ganzen String sichtbar, aber eben auch in vielen kleineren Teilen (gleichzeitig und nicht immer nur ein Teil), was natürlich dennoch ein Bearbeiten des "ganzen" Strings etwas erschwert. Lösung wäre dann noch den Debugger dazuzu bringen eine Funktion auszuführen, welche in einer Datei speichert/löscht. Oder eben ein passender DebugViewer. |
AW: Große Strings im Debugger
Hallo,
Zitat:
Delphi-Quellcode:
Haltepunkt auf das
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.StrUtils, System.Classes; var vS: string; vI: Integer; function DepugString(const aStr: String): TStringList; begin Result:= TStringList.Create; Result.Text:= aStr; end; begin try for vI:= 0 to 9999 do vS:= vS+ IntToHex(vI, 4)+ '|'; // Auswerten/Ändern -> SplitString(vS,'|') -> Die aufzurufende Funktion SplitString wurde vom Linker entfernt // Auswerten/Ändern -> DepugString(vS) -> Die aufzurufende Funktion SplitString wurde vom Linker entfernt Writeln(vS); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
Delphi-Quellcode:
und versuchen den String komplett aus dem Debuger zu bekommen.
Writeln(vS);
Das Problem im Debuger, man kann in der Regel nur das aufrufen was der Linker nicht entfernt hat. Mit Copy hatte ich im Debuger noch nie Probleme. Musste jetzt aber auch feststellen das mindesten ab 10.4.2 (das hatte ich gerade offen) die mögliche Länge von Standard-Strings im Auswerten/Ändern auf 16381 Zeichen vergrößert wurde. |
AW: Große Strings im Debugger
Zitat:
Bei mir klappt das allerdings nicht. Der Stringlisten-Viewer bleibt leer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz