Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Große Strings im Debugger (https://www.delphipraxis.net/211060-grosse-strings-im-debugger.html)

Der schöne Günther 22. Jul 2022 12:07

Große Strings im Debugger
 
Schon vor über zehn Jahren haben sich Leute gefragt, wie man eigentlich zur Laufzeit, im Debugger an das Ergebnis von
Delphi-Quellcode:
meinGedöns.ToJson()
oder
Delphi-Quellcode:
.ToXML()
kommt.

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.

himitsu 22. Jul 2022 12:40

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)
Delphi-Referenz durchsuchenSplitString

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)

Der schöne Günther 22. Jul 2022 12:45

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.

Redeemer 22. Jul 2022 13:35

AW: Große Strings im Debugger
 
Delphi-Quellcode:
Clipboard.AsText := MeinString;
So?

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;

Uwe Raabe 22. Jul 2022 13:58

AW: Große Strings im Debugger
 
Zitat:

Zitat von Redeemer (Beitrag 1509063)
Oder eine Methode schreiben, die einen String schreibt:

Sowas wie TFile.WriteAllText?

Dann kann man bei Auswerten/Ändern z.B.
Delphi-Quellcode:
TFile.WriteAllText('c:\temp\dump.txt', MeinString)
eingeben und auf Auswerten klicken. Dazu muss im aktuellen Scope dann aber auch System.IOUtils in der uses stehen.

Alternativ könnte man sich auch einen
Delphi-Quellcode:
record helper for string
schreiben mit einer
Delphi-Quellcode:
CopyToClipboard
Methode. Aber das ist wegen des Highlander Prinzips bei Helpern nicht so schön.

himitsu 22. Jul 2022 14:16

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:

Zitat von Uwe Raabe (Beitrag 1509065)
Aber das ist wegen des Highlander Prinzips bei Helpern nicht so schön.

Oftmals gab es aber das Problem, dass das Auswerten nicht von Helpern fand.

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)

mytbo 22. Jul 2022 14:30

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:
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;
Bis bald...
Thomas

Rolf Frei 22. Jul 2022 15:24

AW: Große Strings im Debugger
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1509055)
Schon vor über zehn Jahren haben sich Leute gefragt, wie man eigentlich zur Laufzeit, im Debugger an das Ergebnis von
Delphi-Quellcode:
meinGedöns.ToJson()
oder
Delphi-Quellcode:
.ToXML()
kommt.

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.

Mit Ctrl-F7 sollte doch alles im folgenden Dialog/Memo sichtbar sein oder gibt es da ab 1-2 KB auch eine Grenze? Ich nutze eigentlch immer Ctrl-F7, wenn ich einen längeren String im Debugger sehen will.

Der schöne Günther 22. Jul 2022 16:19

AW: Große Strings im Debugger
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Rolf Frei (Beitrag 1509074)
Mit Ctrl-F7 sollte doch alles im folgenden Dialog/Memo sichtbar sein oder gibt es da ab 1-2 KB auch eine Grenze?

Vielen Dank! Der macht leider auch ziemlich früh Schluss, aber ein bisschen mehr Puste hat er schon. Das ist immerhin schon mal ein Fortschritt!

einbeliebigername 22. Jul 2022 20:19

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:
Copy(<Variable>, 1, 2000)
eingeben und Ausführen. Die erste Zahl entsprechen erhöhen und nochmal. Die Grenze bei Strings im Debugger ist 2k.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz