diff --git a/debugger/breakpointsdlg.pp b/debugger/breakpointsdlg.pp
index 57b8259bb0..086bb4aa6e 100644
--- a/debugger/breakpointsdlg.pp
+++ b/debugger/breakpointsdlg.pp
@@ -39,7 +39,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, LResources, StdCtrls,
- Buttons, Extctrls, Menus, ComCtrls, Debugger, DebuggerDlg;
+ Buttons, Extctrls, Menus, ComCtrls, IDEProcs, Debugger, DebuggerDlg;
type
TBreakPointsDlg = class(TDebuggerDlg)
@@ -65,7 +65,8 @@ type
procedure popDisableAllClick(Sender: TObject);
procedure popEnableAllClick(Sender: TObject);
procedure popDeleteAllClick(Sender: TObject);
- private
+ private
+ FBaseDirectory: string;
FBreakpointsNotification: TDBGBreakPointsNotification;
procedure BreakPointAdd(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
@@ -73,14 +74,17 @@ type
const ABreakpoint: TDBGBreakPoint);
procedure BreakPointRemove(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
+ procedure SetBaseDirectory(const AValue: string);
procedure UpdateItem(const AItem: TListItem;
const ABreakpoint: TDBGBreakPoint);
+ procedure UpdateAll;
protected
procedure SetDebugger(const ADebugger: TDebugger); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
+ property BaseDirectory: string read FBaseDirectory write SetBaseDirectory;
end;
@@ -123,6 +127,13 @@ begin
lvBreakPoints.Items.FindData(ABreakpoint).Free;
end;
+procedure TBreakPointsDlg.SetBaseDirectory(const AValue: string);
+begin
+ if FBaseDirectory=AValue then exit;
+ FBaseDirectory:=AValue;
+ UpdateAll;
+end;
+
constructor TBreakPointsDlg.Create(AOwner: TComponent);
begin
inherited;
@@ -240,20 +251,33 @@ const
var
Action: TDBGBreakPointAction;
S: String;
+ Filename: String;
begin
-// Filename/Address
-// Line/Length
-// Condition
-// Action
-// Pass Count
-// Group
+ // Filename/Address
+ // Line/Length
+ // Condition
+ // Action
+ // Pass Count
+ // Group
+ // state
AItem.Caption := DEBUG_STATE[ABreakpoint.Enabled, ABreakpoint.Valid];
- AItem.SubItems[0] := ABreakpoint.Source;
+
+ // filename
+ Filename:=ABreakpoint.Source;
+ if BaseDirectory<>'' then
+ Filename:=CreateRelativePath(Filename,BaseDirectory);
+ AItem.SubItems[0] := Filename;
+
+ // line
if ABreakpoint.Line > 0
then AItem.SubItems[1] := IntToStr(ABreakpoint.Line)
else AItem.SubItems[1] := '';
+
+ // expression
AItem.SubItems[2] := ABreakpoint.Expression;
+
+ // actions
S := '';
for Action := Low(Action) to High(Action) do
if Action in ABreakpoint.Actions
@@ -262,12 +286,21 @@ begin
S := S + DEBUG_ACTION[Action]
end;
AItem.SubItems[3] := S;
+
+ // hitcount
AItem.SubItems[4] := IntToStr(ABreakpoint.HitCount);
+
+ // group
if ABreakpoint.Group = nil
then AItem.SubItems[5] := ''
else AItem.SubItems[5] := ABreakpoint.Group.Name;
end;
+procedure TBreakPointsDlg.UpdateAll;
+begin
+
+end;
+
initialization
{$I breakpointsdlg.lrs}
@@ -276,6 +309,9 @@ end.
{ =============================================================================
$Log$
+ Revision 1.12 2003/05/27 15:04:00 mattias
+ small fixes for debugger without file
+
Revision 1.11 2003/05/23 14:12:51 mattias
implemented restoring breakpoints
diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas
index d215269bf7..9f0708f226 100644
--- a/ide/debugmanager.pas
+++ b/ide/debugmanager.pas
@@ -400,12 +400,22 @@ begin
then begin
FDialogs[ADialogType] := DEBUGDIALOGCLASS[ADialogType].Create(Self);
CurDialog:=FDialogs[ADialogType];
+ if (CurDialog is TBreakPointsDlg) then begin
+ if (Project1<>nil) then
+ TBreakPointsDlg(CurDialog).BaseDirectory:=Project1.ProjectDirectory;
+ end;
CurDialog.Name:=NonModalIDEWindowNames[DebugDlgIDEWindow[ADialogType]];
CurDialog.Tag := Integer(ADialogType);
CurDialog.OnDestroy := @DebugDialogDestroy;
DoInitDebugger;
CurDialog.Debugger := FDebugger;
EnvironmentOptions.IDEWindowLayoutList.Apply(CurDialog,CurDialog.Name);
+ end else begin
+ CurDialog:=FDialogs[ADialogType];
+ if (CurDialog is TBreakPointsDlg) then begin
+ if (Project1<>nil) then
+ TBreakPointsDlg(CurDialog).BaseDirectory:=Project1.ProjectDirectory;
+ end;
end;
FDialogs[ADialogType].Show;
FDialogs[ADialogType].BringToFront;
@@ -566,6 +576,7 @@ begin
for i:=0 to FBreakpoints.Count-1 do begin
CurBreakPoint:=FBreakpoints[i];
if CompareFileNames(CurBreakPoint.Source,SrcFilename)=0 then begin
+
if CurBreakPoint.Enabled then begin
if CurBreakPoint.Valid in [vsValid,vsUnknown] then
CurType:=semActiveBreakPoint
@@ -573,7 +584,7 @@ begin
CurType:=semInvalidBreakPoint;
end else
CurType:=semInactiveBreakPoint;
- ASrcEdit.SetBreakPoint(CurBreakPoint.Line,CurType);
+ ASrcEdit.SetBreakPointMark(CurBreakPoint.Line,CurType);
end;
end;
end;
@@ -656,13 +667,13 @@ begin
LaunchingCmdLine:=MainIDE.GetRunCommandLine;
SplitCmdLine(LaunchingCmdLine,LaunchingApplication,LaunchingParams);
+ if (not FileExists(LaunchingApplication)) then exit;
OldBreakpoints := nil;
OldBreakPointGroups := nil;
OldWatches := nil;
-
- try
+ try
case EnvironmentOptions.DebuggerType of
dtGnuDebugger: begin
// check if debugger already created with the right type
@@ -927,6 +938,9 @@ end.
{ =============================================================================
$Log$
+ Revision 1.29 2003/05/27 15:04:00 mattias
+ small fixes for debugger without file
+
Revision 1.28 2003/05/27 08:01:31 marc
MWE: + Added exception break
* Reworked adding/removing breakpoints
diff --git a/ide/outputfilter.pas b/ide/outputfilter.pas
index 52e43d66d6..a9c6a3c518 100644
--- a/ide/outputfilter.pas
+++ b/ide/outputfilter.pas
@@ -142,7 +142,7 @@ end;
function TOutputFilter.Execute(TheProcess: TProcess): boolean;
const
- BufSize = 1024;
+ BufSize = 100;
var
i, Count, LineStart : longint;
OutputLine, Buf : String;
@@ -156,7 +156,7 @@ begin
SetLength(Buf,BufSize);
OutputLine:='';
- ErrorExists:=false;
+ ErrorExists:=true;
repeat
Application.ProcessMessages;
if StopExecute then exit;
@@ -172,7 +172,6 @@ begin
OutputLine:=OutputLine+copy(Buf,LineStart,i-LineStart);
ReadLine(OutputLine,false);
if fLastErrorType in [etFatal, etPanic, etError] then begin
- ErrorExists:=true;
Result:=false;
end;
OutputLine:='';
@@ -186,8 +185,8 @@ begin
OutputLine:=OutputLine+copy(Buf,LineStart,Count-LineStart+1);
until Count=0;
TheProcess.WaitOnExit;
- if TheProcess.ExitStatus<>0 then
- ErrorExists:=true;
+ if TheProcess.ExitStatus=0 then
+ ErrorExists:=false;
if ErrorExists and (ofoExceptionOnError in Options) then
raise EOutputFilterError.Create('there was an error');
end;
@@ -598,7 +597,9 @@ end;
function TOutputFilter.SearchIncludeFile(const ShortIncFilename: string
): string;
// search the include file and make it relative to the current start directory
-var SearchedDirectories: TStringList;
+var
+ AlreadySearchedPaths: string;
+ AlreadySearchedIncPaths: string;
FullDir, RelativeDir, IncludePath: string;
p: integer;
begin
@@ -606,26 +607,30 @@ begin
Result:=ShortIncFilename;
exit;
end;
- SearchedDirectories:=TStringList.Create;
- try
- // try every compiled pascal source
- for p:=fCompilingHistory.Count-1 downto 0 do begin
- RelativeDir:=AppendPathDelim(ExtractFilePath(fCompilingHistory[p]));
- FullDir:=RelativeDir;
- if not FilenameIsAbsolute(FullDir) then
- FullDir:=fCurrentDirectory+FullDir;
- FullDir:=TrimFilename(FullDir);
- if SearchedDirectories.IndexOf(FullDir)>=0 then continue;
- // new directory start a search
- Result:=FullDir+ShortIncFilename;
- if FileExists(Result) then begin
- // file found in search dir
- Result:=CleanAndExpandFilename(FullDir+ShortIncFilename);
- exit;
- end;
- if Assigned(OnGetIncludePath) then begin
- // search with include path of directory
- IncludePath:=OnGetIncludePath(FullDir);
+ AlreadySearchedPaths:='';
+ AlreadySearchedIncPaths:='';
+ // try every compiled pascal source
+ for p:=fCompilingHistory.Count-1 downto 0 do begin
+ RelativeDir:=AppendPathDelim(ExtractFilePath(fCompilingHistory[p]));
+ FullDir:=RelativeDir;
+ if not FilenameIsAbsolute(FullDir) then
+ FullDir:=fCurrentDirectory+FullDir;
+ FullDir:=TrimFilename(FullDir);
+ if SearchDirectoryInSearchPath(AlreadySearchedPaths,FullDir,1)>0 then
+ continue;
+ // new directory start a search
+ Result:=FullDir+ShortIncFilename;
+ if FileExists(Result) then begin
+ // file found in search dir
+ Result:=CleanAndExpandFilename(FullDir+ShortIncFilename);
+ exit;
+ end;
+ AlreadySearchedPaths:=MergeSearchPaths(AlreadySearchedPaths,FullDir);
+ // search with include path of directory
+ if Assigned(OnGetIncludePath) then begin
+ IncludePath:=TrimSearchPath(OnGetIncludePath(FullDir),FullDir);
+ IncludePath:=RemoveSearchPaths(IncludePath,AlreadySearchedIncPaths);
+ if IncludePath<>'' then begin
Result:=SearchFileInPath(ShortIncFilename,FullDir,IncludePath,';',[]);
if Result<>'' then begin
if LeftStr(Result,length(fCurrentDirectory))=fCurrentDirectory then
@@ -633,11 +638,10 @@ begin
RightStr(Result,length(Result)-length(fCurrentDirectory)));
exit;
end;
+ AlreadySearchedIncPaths:=MergeSearchPaths(AlreadySearchedIncPaths,
+ IncludePath);
end;
- SearchedDirectories.Add(FullDir);
end;
- finally
- SearchedDirectories.Free;
end;
Result:=ShortIncFilename;
end;
diff --git a/images/bookmark.lrs b/images/bookmark.lrs
index 622ff333a8..e5dc8edcd9 100644
--- a/images/bookmark.lrs
+++ b/images/bookmark.lrs
@@ -117,6 +117,13 @@ LazarusResources.Add('InvalidBreakPoint','XPM',[
+'+###+++.",'#10'".++#+@@#++.",'#10'" .++@@+++. ",'#10'" .+++++. ",'#10'" '
+' ..... "};'#10
]);
+LazarusResources.Add('MultiBreakPoint','XPM',[
+ '/* XPM */'#10'static char * MultiBreakPoint_xpm[] = {'#10'"11 11 3 1",'#10'"'
+ +' '#9'c None",'#10'".'#9'c #000000",'#10'"+'#9'c #FF0000",'#10'" ... "'
+ +','#10'" .+++. ",'#10'" .+++... ",'#10'".+++.+++. ",'#10'".++.+++++. '
+ +'",'#10'".+.+++++++.",'#10'" ..+++++++.",'#10'" .+++++++.",'#10'" .+++++.'
+ +' ",'#10'" .+++. ",'#10'" ... "};'#10
+]);
LazarusResources.Add('UnknownBreakPoint','XPM',[
'/* XPM */'#10'static char * UnknownBreakPoint_xpm[] = {'#10'"11 11 5 1",'#10
+'" '#9'c None",'#10'".'#9'c #000000",'#10'"+'#9'c #FF0000",'#10'"@'#9'c #FFF'
diff --git a/lcl/interfaces/gtk2/gtk2interface.lpk b/lcl/interfaces/gtk2/gtk2interface.lpk
index eade077d78..6df11f7606 100644
--- a/lcl/interfaces/gtk2/gtk2interface.lpk
+++ b/lcl/interfaces/gtk2/gtk2interface.lpk
@@ -37,9 +37,6 @@
-
-
-