如何使用Delphi IDE保存断点?我只知道如何将设置存储在.dsk
文件中。
我正在使用Delphi 2007.
答案 0 :(得分:2)
我假设您提到.Dsk文件,您知道断点存储在那里,但是由于某种原因想要自己保存它们。当然,获取已保存断点列表的最简单方法就是从.Dsk文件中读取它们,但这假定它已保存到磁盘,这通常是 关闭项目文件时发生。
您可以编写自己的IDE插件来获取当前设置的断点列表
并以任何你想要的方式保存它们。下面的极简主义示例显示了如何执行此操作 - 有关详细信息,请参阅GetBreakpoints
方法。要在IDE中使用它,您需要创建一个需要的新包
DesignIde.Dcp。确保.Bpl文件的输出目录位于其中
您的第三方.Bpls存储在您的路径上或在您的路径上。然后你可以安装
IDE中的包从IDE菜单中查看Install packages
。
正如您所看到的,它通过使用ToolsAPI单元中的BorlandIDEServices
接口来获取IOTADebuggerServices
接口,然后使用它来迭代其SourceBkpts
列表并保存一个数字该列表中每个IOTASourceBreakpoint
的属性。
请注意
您还可以检索address breakpoints
的列表,并以类似的方式保存这些列表。
ToolsAPI中的两种断点接口都有属性设置器和getter,因此您可以修改代码中的现有断点,并可以创建新的断点。
代码
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;