AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Große Strings im Debugger

Ein Thema von Der schöne Günther · begonnen am 22. Jul 2022 · letzter Beitrag vom 24. Jul 2022
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Große Strings im Debugger

  Alt 22. Jul 2022, 13:07
Schon vor über zehn Jahren haben sich Leute gefragt, wie man eigentlich zur Laufzeit, im Debugger an das Ergebnis von meinGedöns.ToJson() oder .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 Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 13:40
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Jul 2022 um 13:46 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 13:45
Im Endeffekt natürlich ums Rauskopieren, denn ich untersuche eine 5000 Zeilen lange, unformatierte JSON sicher nicht im dem kleinen Textfenster im Debugger.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 14:35
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;
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 14:58
Oder eine Methode schreiben, die einen String schreibt:
Sowas wie TFile.WriteAllText?

Dann kann man bei Auswerten/Ändern z.B. 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 record helper for string schreiben mit einer CopyToClipboard Methode. Aber das ist wegen des Highlander Prinzips bei Helpern nicht so schön.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 15:16
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.


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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 15:30
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
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 16:24
Schon vor über zehn Jahren haben sich Leute gefragt, wie man eigentlich zur Laufzeit, im Debugger an das Ergebnis von meinGedöns.ToJson() oder .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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 17:19
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!
Miniaturansicht angehängter Grafiken
screenshot-2022-07-22-171726.png  
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#10

AW: Große Strings im Debugger

  Alt 22. Jul 2022, 21:19
Hallo,

wenn man wärend des Debugens an einer Stelle den Inhalt eines langen Strings haben will, dann Start -> Auswerten/Ändern, Copy(<Variable>, 1, 2000) eingeben und Ausführen. Die erste Zahl entsprechen erhöhen und nochmal. Die Grenze bei Strings im Debugger ist 2k.
Mit freundlichen Grüßen, einbeliebigername.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.
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