mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 01:09:27 +02:00
readme.txt
This commit is contained in:
parent
9572b14dea
commit
705b7cb752
@ -340,7 +340,7 @@ uses
|
||||
Dos,Mouse,Video,
|
||||
App,Commands,Strings,
|
||||
Systems,
|
||||
FPVars,FPUtils,FPConst,
|
||||
FPVars,FPUtils,FPConst,FPSwitch,
|
||||
FPIntf,FPCompile,FPIde,FPHelp,
|
||||
Validate,WEditor,WUtils;
|
||||
|
||||
@ -1860,6 +1860,15 @@ procedure TWatch.Get_new_value;
|
||||
p:=StrNew(Debugger^.GetOutput);
|
||||
{ do not open a messagebox for such errors }
|
||||
Debugger^.got_error:=false;
|
||||
|
||||
{ We should try here to find the expr in parent
|
||||
procedure if there are
|
||||
I will implement this as I added a
|
||||
parent_ebp pseudo local var to local procedure
|
||||
in stabs debug info PM }
|
||||
{ But there are some pitfalls like
|
||||
locals redefined in other sublocals that call the function }
|
||||
|
||||
q:=nil;
|
||||
if assigned(p) and (p[0]='$') then
|
||||
q:=StrPos(p,'=');
|
||||
@ -2831,7 +2840,7 @@ end;
|
||||
Debugger^.Command('backtrace');
|
||||
{ generate list }
|
||||
{ all is in tframeentry }
|
||||
for i:=Debugger^.frame_count-1 downto 0 do
|
||||
for i:=0 to Debugger^.frame_count-1 do
|
||||
begin
|
||||
with Debugger^.frames[i]^ do
|
||||
begin
|
||||
@ -2859,7 +2868,7 @@ end;
|
||||
{ select frame for watches }
|
||||
If not assigned(Debugger) then
|
||||
exit;
|
||||
{$ifdef NODEBUG}
|
||||
{$ifndef NODEBUG}
|
||||
Debugger^.Command('f '+IntToStr(Focused));
|
||||
{ for local vars }
|
||||
Debugger^.ReadWatches;
|
||||
@ -2948,9 +2957,11 @@ procedure InitDebugger;
|
||||
var s : string;
|
||||
i,p : longint;
|
||||
{$endif DEBUG}
|
||||
var
|
||||
cm : longint;
|
||||
|
||||
begin
|
||||
{$ifdef DEBUG}
|
||||
PushStatus('Starting debugger');
|
||||
Assign(gdb_file,GDBOutFileName);
|
||||
{$I-}
|
||||
Rewrite(gdb_file);
|
||||
@ -2973,7 +2984,24 @@ begin
|
||||
Use_gdb_file:=true;
|
||||
{$I+}
|
||||
{$endif}
|
||||
if (not ExistsFile(ExeFile)) or (CompilationPhase<>cpDone) then
|
||||
|
||||
if TargetSwitches^.GetCurrSelParam<>source_os.shortname then
|
||||
begin
|
||||
cm:=ConfirmBox(#3'Sorry, can not debug'#13#3'programs compiled for'
|
||||
+TargetSwitches^.GetCurrSelParam+'.'#13#3
|
||||
+'Change target to'
|
||||
+source_os.shortname+'?',nil,true);
|
||||
if cm=cmCancel then
|
||||
Exit;
|
||||
if cm=cmYes then
|
||||
begin
|
||||
{ force recompilation }
|
||||
PrevMainFile:='';
|
||||
TargetSwitches^.SetCurrSelParam(source_os.shortname);
|
||||
end;
|
||||
end;
|
||||
if (not ExistsFile(ExeFile)) or (CompilationPhase<>cpDone) or
|
||||
(PrevMainFile<>MainFile) then
|
||||
DoCompile(cRun);
|
||||
if CompilationPhase<>cpDone then
|
||||
Exit;
|
||||
@ -2982,12 +3010,9 @@ begin
|
||||
ErrorBox('Oooops, nothing to debug.',nil);
|
||||
Exit;
|
||||
end;
|
||||
if target_os.shortname<>source_os.shortname then
|
||||
begin
|
||||
ErrorBox(#3'Sorry, I can only debug'#13#3'programs compiled for '#13#3
|
||||
+source_os.shortname,nil);
|
||||
Exit;
|
||||
end;
|
||||
{$ifdef DEBUG}
|
||||
PushStatus('Starting debugger');
|
||||
{$endif DEBUG}
|
||||
{ init debugcontroller }
|
||||
if assigned(Debugger) then
|
||||
dispose(Debugger,Done);
|
||||
@ -3119,7 +3144,10 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.47 2000-02-04 00:10:58 pierre
|
||||
Revision 1.48 2000-02-04 14:34:46 pierre
|
||||
readme.txt
|
||||
|
||||
Revision 1.47 2000/02/04 00:10:58 pierre
|
||||
* Breakpoint line in Source Window better handled
|
||||
|
||||
Revision 1.46 2000/02/01 10:59:58 pierre
|
||||
|
@ -89,10 +89,12 @@ type
|
||||
procedure AddLongintItem(const name,param:string);
|
||||
procedure AddStringItem(const name,param:string;mult:boolean);
|
||||
function GetCurrSel:integer;
|
||||
function GetCurrSelParam : String;
|
||||
function GetBooleanItem(index:integer):boolean;
|
||||
function GetLongintItem(index:integer):longint;
|
||||
function GetStringItem(index:integer):string;
|
||||
procedure SetCurrSel(index:integer);
|
||||
function SetCurrSelParam(const s : String) : boolean;
|
||||
procedure SetBooleanItem(index:integer;b:boolean);
|
||||
procedure SetLongintItem(index:integer;l:longint);
|
||||
procedure SetStringItem(index:integer;const s:string);
|
||||
@ -440,12 +442,41 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
function TSwitches.GetCurrSelParam : String;
|
||||
begin
|
||||
if IsSel then
|
||||
GetCurrSelParam:=PSwitchItem(Items^.At(SelNr[SwitchesMode]))^.Param
|
||||
else
|
||||
GetCurrSelParam:='';
|
||||
end;
|
||||
|
||||
procedure TSwitches.SetCurrSel(index:integer);
|
||||
begin
|
||||
if IsSel then
|
||||
SelNr[SwitchesMode]:=index;
|
||||
end;
|
||||
|
||||
function TSwitches.SetCurrSelParam(const s : String) : boolean;
|
||||
function checkitem(P:PSwitchItem):boolean;{$ifndef FPC}far;{$endif}
|
||||
begin
|
||||
{ empty items are not equivalent to others !! }
|
||||
CheckItem:=((S='') and (P^.Param='')) or
|
||||
((Length(S)>0) and (P^.Param=s));
|
||||
end;
|
||||
|
||||
var
|
||||
FoundP : PSwitchItem;
|
||||
begin
|
||||
FoundP:=Items^.FirstThat(@CheckItem);
|
||||
if Assigned(FoundP) then
|
||||
begin
|
||||
SetCurrSelParam:=true;
|
||||
SelNr[SwitchesMode]:=Items^.IndexOf(FoundP);
|
||||
end
|
||||
else
|
||||
SetCurrSelParam:=false;
|
||||
end;
|
||||
|
||||
|
||||
procedure TSwitches.WriteItemsCfg;
|
||||
var
|
||||
@ -905,7 +936,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.16 2000-02-04 00:05:20 pierre
|
||||
Revision 1.17 2000-02-04 14:34:47 pierre
|
||||
readme.txt
|
||||
|
||||
Revision 1.16 2000/02/04 00:05:20 pierre
|
||||
* -Fi must also be used for GetSourceDirectories
|
||||
|
||||
Revision 1.15 2000/01/10 15:52:53 pierre
|
||||
|
@ -78,4 +78,4 @@
|
||||
{$define Undo}
|
||||
{$ifdef DEBUG}
|
||||
{$define DebugUndo}
|
||||
{$endif DEBUG}
|
||||
{$endif DEBUG}
|
@ -4,8 +4,21 @@ This file is just a log of important changes
|
||||
starting 1999/10/29
|
||||
|
||||
|
||||
1999/10/29 :
|
||||
2000/01/28:
|
||||
+ Partial Syntax released:
|
||||
this allows to open highlighted files faster.
|
||||
The highlighting is only computed up to the current editor position
|
||||
and is continued in the Idle loop as a background process
|
||||
(it not a real separate process).
|
||||
|
||||
2000/01/10:
|
||||
+ working register window
|
||||
|
||||
1999/11/10:
|
||||
+ Grouped action started for Undo.
|
||||
Undo of Copy/Cut/Paste or Clear should work.
|
||||
|
||||
1999/10/29:
|
||||
Undo/Redo stuff added to normal compilation
|
||||
this is still buggy !!!
|
||||
Any use of Copy/Cut/Paste or Clear will generate wrong Undo
|
||||
We will t
|
||||
|
@ -1,5 +1,7 @@
|
||||
program TestProgram;
|
||||
{$mode objfpc}
|
||||
{$R-}
|
||||
|
||||
program TestProgram;
|
||||
|
||||
uses
|
||||
{$ifdef go32v2}
|
||||
@ -114,6 +116,8 @@ end;
|
||||
|
||||
function Func1(x,z : word; var y : boolean; const r: TRecord): shortint;
|
||||
|
||||
var loc : string;
|
||||
|
||||
procedure test_local(c,f : longint);
|
||||
var
|
||||
int_loc : longint;
|
||||
@ -121,9 +125,18 @@ function Func1(x,z : word; var y : boolean; const r: TRecord): shortint;
|
||||
Writeln('dummy for browser');
|
||||
end;
|
||||
|
||||
procedure indirect_call;
|
||||
var
|
||||
loc : longint;
|
||||
begin
|
||||
loc:=1;
|
||||
test_local(5,7);
|
||||
end;
|
||||
begin
|
||||
loc:='This is a string';
|
||||
if Hello=0 then X:=0 else X:=1;
|
||||
test_local(0,2);
|
||||
indirect_call;
|
||||
Func1:=X;
|
||||
end;
|
||||
|
||||
@ -140,5 +153,7 @@ BEGIN
|
||||
new(X);
|
||||
X^.next:=X;
|
||||
dispose(X);
|
||||
Halt;
|
||||
END.
|
||||
{ for i:=1 to 99 do
|
||||
Writeln('Line ',i); }
|
||||
Halt(4);
|
||||
END.
|
Loading…
Reference in New Issue
Block a user