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