2016-03-28 3 views
0

Wie kann ich Haltepunkte mit der Delphi IDE speichern? Ich kann nur die Einstellungen in einer .dsk Datei speichern.Wie Sie Haltepunkte mit der Delphi IDE speichern?

Ich verwende Delphi 2007

+1

Die Einstellungen des IDE in der .dsk-Datei gespeichert, das ist so, wie Sie sie speichern * via IDE *. Ich habe * Extras-> Optionen-> Umgebungsoptionen-> Autosave-Optionen-> Projektdesktop * aktiviert und ich habe dauerhafte Lesezeichen (Lesezeichen, die beim Speichern des Projekts gesetzt werden, sind immer noch vorhanden, wenn das Projekt erneut geöffnet wird). –

Antwort

2

Ich bin von Ihrer Erwähnung der .dsk Datei unter der Annahme, dass Sie sich bewusst sind, dass die Haltepunkte in dort gespeichert sind, sondern wollen, dass sie sich aus irgendeinem Grund speichern. Die einfachste Methode zum Abrufen einer Liste gespeicherter Haltepunkte besteht natürlich darin, sie einfach aus der .Dsk-Datei zu lesen. Dabei wird jedoch davon ausgegangen, dass sie auf der Festplatte gespeichert wurde, was beim Schließen der Projektdatei normalerweise ist.

Sie können Ihr eigenes IDE-Plug-In schreiben, um eine Liste der aktuell eingestellten Breakpoints zu erhalten und sie auf beliebige Weise zu speichern. Das minimalistische Beispiel unten zeigt, wie dies zu tun ist - siehe die GetBreakpoints Methode für Details. Um dies in der IDE zu verwenden, würden Sie ein neues Paket erstellen, das DesignIde.Dcp erfordert. Stellen Sie sicher, dass das Ausgabeverzeichnis für die .Bpl-Datei entweder Ihre Drittanbieter-.Bpls sind oder auf Ihrem Pfad gespeichert ist. Sie können dann das -Paket in der IDE unter Install packages über das IDE-Menü installieren.

Wie Sie sehen können, funktioniert es durch die BorlandIDEServices Schnittstelle in den ToolsAPI Einheiten mit einem IOTADebuggerServices Schnittstelle zu bekommen, und dann verwendet, dass seine SourceBkpts Liste iterieren und speichert eine Reihe von Eigenschaften jeder IOTASourceBreakpoint in dieser Liste.

Beachten Sie, dass

  • Sie auch eine Liste der address breakpoints und speichern die in ähnlicher Weise abrufen können.

  • Beide Arten von Breakpoint-Schnittstelle in ToolsAPI verfügen sowohl über Property Setter als auch über Getter, sodass Sie vorhandene Breakpoints im Code ändern und möglicherweise neue erstellen können.

-Code

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    StdCtrls, ToolsApi; 

type 
    TBreakpointSaveForm = class(TForm) 
    Memo1: TMemo; 
    btnGetBreakpoints: TButton; 
    procedure btnGetBreakpointsClick(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    private 
    protected 
    public 
    procedure GetBreakpoints; 
    end; 

var 
    BreakpointSaveForm: TBreakpointSaveForm; 

procedure Register; 

implementation 

{$R *.DFM} 

procedure TBreakpointSaveForm.GetBreakpoints; 
var 
    DebugSvcs: IOTADebuggerServices; 

    procedure SaveBreakpoint(BreakPoint : IOTASourceBreakpoint); 
    begin 
    Memo1.Lines.Add('File:  ' + Breakpoint.FileName); 
    Memo1.Lines.Add('LineNo: ' + IntToStr(Breakpoint.LineNumber)); 
    Memo1.Lines.Add('Passcount: ' + IntToStr(Breakpoint.Passcount)); 
    Memo1.Lines.Add(''); 
    end; 

    procedure SaveBreakpoints; 
    var 
    i : Integer; 
    BreakPoint : IOTASourceBreakpoint; 
    begin 
    Memo1.Lines.Add('Source breakpoint count : '+ IntToStr(DebugSvcs.GetSourceBkptCount)); 
    for i := 0 to DebugSvcs.GetSourceBkptCount - 1 do begin 
     Breakpoint := DebugSvcs.SourceBkpts[i]; 
     SaveBreakpoint(Breakpoint); 
    end; 
    end; 

begin 
    if not Supports(BorlandIDEServices, IOTADebuggerServices, DebugSvcs) then begin 
    ShowMessage('Failed to get IOTADebuggerServices interface'); 
    exit; 
    end; 
    Memo1.Lines.Clear; 
    SaveBreakpoints; 
end; 

procedure Register; 
begin 
end; 

initialization 
    BreakpointSaveForm := TBreakpointSaveForm.Create(Application); 
    BreakpointSaveForm.Show; 

finalization 

    if Assigned(BreakpointSaveForm) then 
    BreakpointSaveForm.Free; 
end. 

procedure TBreakpointSaveForm.btnGetBreakpointsClick(Sender: TObject); 
begin 
    GetBreakpoints; 
end; 
+0

Danke für die Hilfe –

Verwandte Themen