AGB  ·  Datenschutz  ·  Impressum  







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

Haltepunkte sortieren

Ein Thema von Kratos · begonnen am 27. Sep 2023 · letzter Beitrag vom 28. Sep 2023
Antwort Antwort
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#1

Haltepunkte sortieren

  Alt 27. Sep 2023, 09:30
Moin,

Ich weise meinen Haltepunkten oft Gruppen zu.
Wenn man dann irgendwann einige Haltepunkte mit verschiedenen Gruppen im Haltepunkte-Fenster gesammelt hat, wird es für mich ein wenig unübersichtlich.
Natürlich könnte ich nach jedem Commit die dazugehörigen Haltepunkte aus der Liste löschen.
Das ist natürlich viel zu langweilig.
Gibt es eine Möglichkeit die Haltepunkte zu sortieren?
In meinem Fall würde ich gern nach Gruppen sortieren.
(Ich hab schon wild im Haltepunkte-Fenster herumgeklickt. Das gewünschte Ergebnis konnte ich nicht erzielen.)

Viele Grüße
Kratos
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Haltepunkte sortieren

  Alt 27. Sep 2023, 09:36
Nicht, dass ich wüsste, aber

* du kannst einen Feature-Request beim Hersteller einreichen

* und du kommst via OpenToolsAPI an die Haltepunkte dran
Alle auslesen -> löschen -> und in der gewünschten reihenfolge neu erstellen

* oder manuell in der *.dsk rumfummeln
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Haltepunkte sortieren

  Alt 27. Sep 2023, 09:54
Danke für die Tipps und die sehr schnelle Antwort!

Ich werde mir OpenToolsAPI und die jeweilige .dsk mal anschauen.
Vielleicht kann ich mir für meine Zwecke sogar ein kleines Tool zusammenbauen.
  Mit Zitat antworten Zitat
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Haltepunkte sortieren

  Alt 28. Sep 2023, 13:01
Zitat:
* oder manuell in der *.dsk rumfummeln
Das habe ich spaßeshalber mal gemacht.
Und es ist ein kleines Tool dabei heraus gekommen, mit dem man nun entweder nach Dateiname oder Gruppe die Haltepunkte sortieren kann.
Das klappt eigentlich ziemlich gut.
Einziger Nachteil, ich kann die Haltepunkte nicht zur Laufzeit der IDE sortiert anzeigen.
Es scheint so, als ob die Haltepunkte einmal beim Öffnen des Projekts aus der .dsk geladen und einmal weggespeichert werden beim Schließen des Projekts.

Derzeitiger Vorgehensweise:
- Projekt/IDE schließen
- Haltepunkte über externes Programm sortieren
- IDE mit jeweiligem Projekt starten

Ich hab leider so gar keine Idee, wie man es schaffen könnte, die Haltepunkte zur Laufzeit der IDE zu sortieren und sofort anzuzeigen.
Oder müsste ich dann doch über OpenToolsAPI gehen?

Geändert von Kratos (28. Sep 2023 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Haltepunkte sortieren

  Alt 28. Sep 2023, 13:29
Ich habe etwas ähnliches umgesetzt.
Wenn Du grundsätzlich mit den OTAPI zurecht kommst, sollte es dann mit folgendem Ansatz klappen:

Ich habe einen Containerliste gebaut, in der ich die Breakpoints der aktuellen Unit sammle und dann die Container nach meiner Logik umsortiere.
Dann lösche ich die Breakpoints und lege sie neu an.
Funktioniert für mich vollständig so.
Parnassis-Breakpoints werden damit nicht unterstützt.


Delphi-Quellcode:
  class procedure TXXX.GetBreakpoints(const aSL: TStringList; const aBreakPointList: TList<IOTASourceBreakpoint>; const aUnitFileName: String);
  var
    DebugSvcs : IOTADebuggerServices;
    i : Integer;
    BreakPoint: IOTASourceBreakpoint;
  begin
    if not Supports(BorlandIDEServices, IOTADebuggerServices, DebugSvcs) then
      Exit;
    aBreakPointList.Clear;
    for i := 0 to DebugSvcs.GetSourceBkptCount - 1 do
      begin
        BreakPoint := DebugSvcs.SourceBkpts[i];
        if (BreakPoint.FileName = aUnitFileName) then
          begin
            aBreakPointList.Add(BreakPoint);
            xxTags.RegisterTag(BreakPoint.LineNumber - 1, 0, '!' + IntToStr(aBreakPointList.Count - 1));
          end;
      end;
  end;

  class procedure TXXX.RestoreBreakpoints(const BreakpointPosList: TList<TBreakpointPos>);
  var
    DebugSvcs : IOTADebuggerServices;
    i : Integer;
    BreakpointPos: TBreakpointPos;
    BreakPoint_ : IOTABreakpoint;
  begin
    if not Supports(BorlandIDEServices, IOTADebuggerServices, DebugSvcs) then
      Exit;
    for i := 0 to BreakpointPosList.Count - 1 do
      begin
        BreakpointPos := BreakpointPosList[i];
        if (BreakpointPos.Y >= 0) then
          begin
            BreakPoint_ := DebugSvcs.NewSourceBreakpoint(BreakpointPos.BreakPoint.FileName, BreakpointPos.Y, nil);
            BreakPoint_.ThreadCondition := BreakpointPos.BreakPoint.ThreadCondition;
            BreakPoint_.StackFramesToLog := BreakpointPos.BreakPoint.StackFramesToLog;
            BreakPoint_.DoHandleExceptions := BreakpointPos.BreakPoint.DoHandleExceptions;
            BreakPoint_.DoIgnoreExceptions := BreakpointPos.BreakPoint.DoIgnoreExceptions;
            BreakPoint_.GroupName := BreakpointPos.BreakPoint.GroupName;
            BreakPoint_.DoBreak := BreakpointPos.BreakPoint.DoBreak;
            BreakPoint_.LogMessage := BreakpointPos.BreakPoint.LogMessage;
            BreakPoint_.EvalExpression := BreakpointPos.BreakPoint.EvalExpression;
            BreakPoint_.LogResult := BreakpointPos.BreakPoint.LogResult;
            BreakPoint_.EnableGroup := BreakpointPos.BreakPoint.EnableGroup;
            BreakPoint_.DisableGroup := BreakpointPos.BreakPoint.DisableGroup;
            BreakPoint_.Enabled := BreakpointPos.BreakPoint.Enabled;
            BreakPoint_.Expression := BreakpointPos.BreakPoint.Expression;
            BreakPoint_.PassCount := BreakpointPos.BreakPoint.PassCount;
          end;
        BreakpointPos.Free;
      end;
  end;

  class procedure TXXX.ScanBreakpoints(const aBreakPointList: TList<IOTASourceBreakpoint>; const BreakpointPosList: TList<TBreakpointPos>);
  var
    i : Integer;
    BreakPoint : IOTASourceBreakpoint;
    LineNumber : Integer;
    BreakpointPos: TBreakpointPos;

    function GetLineNumber(aNr: Integer): Integer;
    var
      i : Integer;
      S : string;
      sNr : string;
      Nr : Integer;
      lxxTag: TxxTag;
    begin
      Result := -1;
      i := 0;
      while (i <= xxTags.Items.Count - 1) do
        begin
          lxxTag := xxTags.Items[i];
          S := lxxTag.S;
          if (Copy(S, 1, 1) = '!') then
            begin
              sNr := Copy(S, 2);
              Nr := StrToInt(sNr);
              if (Nr = aNr) then
                begin
                  Result := lxxTag.Y;
                  xxTags.Items.Delete(i);
                  Exit;
                end;
            end;
          Inc(i);
        end;
    end;

  begin
    for i := 0 to aBreakPointList.Count - 1 do
      begin
        BreakPoint := aBreakPointList[i];
        LineNumber := GetLineNumber(i);
        if (LineNumber >= 0) then
          begin
            BreakpointPos := TBreakpointPos.Create;
            BreakpointPos.Y := LineNumber;
            BreakpointPos.BreakPoint := BreakPoint;
            BreakpointPosList.Add(BreakpointPos);
          end;
      end;
  end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Kratos

Registriert seit: 15. Okt 2019
52 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Haltepunkte sortieren

  Alt 28. Sep 2023, 14:18
@stahli
Vielen Dank für deinen Beitrag!
Ich hab mit OpenToolsAPI noch nie etwas gemacht.
Da muss ich mich erst einmal einarbeiten.
Falls Fragen bei mir auftauchen zu deinem Code, melde ich mich noch einmal.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Haltepunkte sortieren

  Alt 28. Sep 2023, 14:40
Gibt es viele Tutorials zu finden.

Muß man in ein Package reinmachen und ein paar "geheime" DesignTimePackages ins Requires rein. (falls du dich wundern solltest, dass es bei ein paar Design-Units heißt, sie gäbe es nicht, welche da in den Beispielen verwendet werden)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Sep 2023 um 15:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.603 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Haltepunkte sortieren

  Alt 28. Sep 2023, 19:03
Kann man das externe Tool nicht per Tools-Menü aufrufen? Da gibt es dann ein paar nette spezielle "Parameter", die sicherstellen, dass Dateien gespeichert und ggf. wieder geladen werden. Ich weiß aber nicht, ob das auch für .dsk-Dateien funktioniert.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Haltepunkte sortieren

  Alt 28. Sep 2023, 19:05
Menü > Tools > Tools konfigurieren
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:39 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