Merged revision(s) 43361-43362 #ab9fde51c0-#ab9fde51c0, 43364 #bc2c1b3479, 43366-43368 #dbfc98eda7-#dbfc98eda7, 43371 #14551314c1, 43373 #c77e5896f2, 43375 #044a2e94ef, 43380-43381 #00d03773a0-#00d03773a0 from trunk:

Debugger: taborder for watch-properties
---------------------
Debugger: fix internal type for gdb request (eval vs ptype)
---------------------
SynEdit: Highlight-all, fix index for last element
---------------------
THintWindow: adjust for BidiMode in CalcHintRect. Slight improvement on r43367 #9e3191112e. 
---------------------
Components: fixed Lazarus Package Manager compilation with FPC >= 2.6.3
---------------------
TApplication: adjust position of THintWindow depending on LTR or RTL alignment. 
---------------------
THintWindow: adjust for BidiMode in CalcHintRect. Issue #0025275. 
---------------------
Debugger: better pid detection for attach. Issue #0025273
---------------------
Debugger: prevent messing up the environment on windows, due to gdb bug (gdb not setting debuggee environment) / introduced in rev 42419 #03f50d973c 
---------------------
Debugger: Add timeout protection for breakpoints during start up. Issue #0025277
---------------------
TApplication: set THintWindow.BidiMode. Issue #0022048. 

git-svn-id: branches/fixes_1_2@43383 -
This commit is contained in:
martin 2013-11-06 20:48:37 +00:00
parent e18454dd47
commit 2c0c52f907
10 changed files with 90 additions and 40 deletions

View File

@ -158,10 +158,17 @@ begin
exit;
Prefix:='';
case Level of
{$IF FPC_FULLVERSION > 20602}
llWarning :
Prefix:=SWarning;
llError :
Prefix:=SError;
{$ELSE}
vlWarning :
Prefix:=SWarning;
vlError :
Prefix:=SError;
{$ENDIF}
{ vlInfo :
Prefix:='I: ';
vlCommands :
@ -574,7 +581,7 @@ begin
CompilerOptions.UpdateLocalRepositoryOption;
if FileExists(S) then
begin
pkgglobals.Log(vlDebug, SLogLoadingCompilerConfig, [S]);
pkgglobals.Log({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, SLogLoadingCompilerConfig, [S]);
CompilerOptions.LoadCompilerFromFile(S);
end
else
@ -582,7 +589,7 @@ begin
// Generate a default configuration if it doesn't exists
if GlobalOptions.CompilerConfig = 'default' then
begin
pkgglobals.Log(vlDebug, SLogGeneratingCompilerConfig, [S]);
pkgglobals.Log({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, SLogGeneratingCompilerConfig, [S]);
CompilerOptions.InitCompilerDefaults;
CompilerOptions.SaveCompilerToFile(S);
if CompilerOptions.SaveInifileChanges then
@ -592,13 +599,13 @@ begin
Error(SErrMissingCompilerConfig, [S]);
end;
// Log compiler configuration
CompilerOptions.LogValues(vlDebug, '');
CompilerOptions.LogValues({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, '');
// Load FPMake compiler config, this is normally the same config as above
S := GlobalOptions.CompilerConfigDir + GlobalOptions.FPMakeCompilerConfig;
FPMakeCompilerOptions.UpdateLocalRepositoryOption;
if FileExists(S) then
begin
pkgglobals.Log(vlDebug, SLogLoadingFPMakeCompilerConfig, [S]);
pkgglobals.Log({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, SLogLoadingFPMakeCompilerConfig, [S]);
FPMakeCompilerOptions.LoadCompilerFromFile(S);
if FPMakeCompilerOptions.SaveInifileChanges then
FPMakeCompilerOptions.SaveCompilerToFile(S);
@ -606,7 +613,7 @@ begin
else
Error(SErrMissingCompilerConfig, [S]);
// Log compiler configuration
FPMakeCompilerOptions.LogValues(vlDebug, 'fpmake-building ');
FPMakeCompilerOptions.LogValues({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, 'fpmake-building ');
end;
procedure TFppkgForm.DoRun(cfg: TFppkgConfigOptions; ParaAction: string;
@ -660,7 +667,7 @@ begin
laz_pkghandler.Laz_ExecuteAction('', 'laz_update');
except
on E: Exception do
pkgglobals.Log(vlWarning, E.Message);
pkgglobals.Log({$IF FPC_FULLVERSION > 20602}llWarning{$ELSE}vlWarning{$ENDIF}, E.Message);
end;
end;
LoadLocalAvailableRepository;
@ -677,7 +684,7 @@ begin
(ParaAction = 'laz_compile') or (ParaAction = 'laz_build') or
(ParaAction = 'laz_install') or (ParaAction = 'laz_archive')) then
begin
pkgglobals.Log(vlDebug, SLogCheckBrokenDependenvies);
pkgglobals.Log({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, SLogCheckBrokenDependenvies);
SL := TStringList.Create;
if FindBrokenPackages(SL) then
Error(SErrBrokenPackagesFound);
@ -703,7 +710,7 @@ begin
end
else
begin
pkgglobals.Log(vlDebug, SLogCommandLineAction,['[' + ParaPackages[i] + ']', ParaAction]);
pkgglobals.Log({$IF FPC_FULLVERSION > 20602}llDebug{$ELSE}vlDebug{$ENDIF}, SLogCommandLineAction,['[' + ParaPackages[i] + ']', ParaAction]);
laz_pkghandler.Laz_ExecuteAction(ParaPackages[i], ParaAction);
end;
end;

View File

@ -279,12 +279,21 @@ begin
//setup verbosity
with VerbosityCheckGroup do
begin
{$IF FPC_FULLVERSION > 20602}
Checked[Items.IndexOf('Error')] := llError in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Warning')] := llWarning in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Info')] := llInfo in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Commands')] := llCommands in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Debug')] := llDebug in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Progress')] := llProgres in LazPkgOptions.Verbosity;
{$ELSE}
Checked[Items.IndexOf('Error')] := vlError in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Warning')] := vlWarning in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Info')] := vlInfo in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Commands')] := vlCommands in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Debug')] := vlDebug in LazPkgOptions.Verbosity;
Checked[Items.IndexOf('Progress')] := vlProgres in LazPkgOptions.Verbosity;
{$ENDIF}
end;
end;
@ -296,6 +305,20 @@ begin
LazPkgOptions.Verbosity := [];
with VerbosityCheckGroup do
begin
{$IF FPC_FULLVERSION > 20602}
if Checked[Items.IndexOf('Error')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [llError];
if Checked[Items.IndexOf('Warning')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [llWarning];
if Checked[Items.IndexOf('Info')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [llInfo];
if Checked[Items.IndexOf('Commands')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [llCommands];
if Checked[Items.IndexOf('Debug')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [llDebug];
if Checked[Items.IndexOf('Progress')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [llProgres];
{$ELSE}
if Checked[Items.IndexOf('Error')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [vlError];
if Checked[Items.IndexOf('Warning')] then
@ -308,6 +331,7 @@ begin
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [vlDebug];
if Checked[Items.IndexOf('Progress')] then
LazPkgOptions.Verbosity := LazPkgOptions.Verbosity + [vlProgres];
{$ENDIF}
end;
Close;

View File

@ -19,9 +19,15 @@ begin
pkghandlerclass:=GetPkgHandler(AAction);
With pkghandlerclass.Create(nil,APackageName) do
try
{$IF FPC_FULLVERSION > 20602}
Log(llDebug,SLogRunAction+' start',[AAction]);
Execute;
Log(llDebug,SLogRunAction+' end',[AAction]);
{$ELSE}
Log(vlDebug,SLogRunAction+' start',[AAction]);
Execute;
Log(vlDebug,SLogRunAction+' end',[AAction]);
{$ENDIF}
finally
Free;
end;

View File

@ -6,7 +6,7 @@ interface
uses
SysUtils, Classes, ComCtrls,
fprepos;
fprepos{$IF FPC_FULLVERSION > 20602}, fpmkunit{$ENDIF};
type

View File

@ -2264,7 +2264,7 @@ begin
if (OldEndPoint.y >= 0) and not IsPosValid(OldEndPoint) then
OldEndPoint := Point(1, FFirstInvalidLine - AdjustedSearchStrMaxLines);
if (OldEndPoint.y < 0) and (FMatches.Count > 0) then
OldEndPoint := FMatches.EndPoint[FMatches.Count];
OldEndPoint := FMatches.EndPoint[FMatches.Count-1];
if (OldEndPoint.y <= OldStartPoint.y) or
(OldEndPoint.y < 0) or (OldStartPoint.y < 0) or

View File

@ -5055,6 +5055,8 @@ begin
end;
SetTargetInfo(FileType);
DefaultTimeOut := DebuggerProperties.TimeoutForEval; // Getting address for breakpoints may need timeout
DetectForceableBreaks;
(* We need a breakpoint at entry-point or main, to continue initialization
@ -5087,6 +5089,7 @@ begin
DebugLn(DBG_VERBOSE, '[Debugger] Target PID: %u', [TargetInfo^.TargetPID]);
// they may still exist from prev run, addr will be checked
// TODO: defered setting of below beakpoint / e.g. if debugging a library
FTheDebugger.FExceptionBreak.SetByAddr(Self);
FTheDebugger.FBreakErrorBreak.SetByAddr(Self);
FTheDebugger.FRunErrorBreak.SetByAddr(Self);
@ -5209,7 +5212,7 @@ begin
// Get PID
NewPID := 0;
s := GetPart(['Attaching to process '], [LineEnding], CmdResp, True, False);
s := GetPart(['Attaching to process '], [LineEnding, '.'], CmdResp, True, False);
if s <> '' then
NewPID := StrToIntDef(s, 0);
@ -8303,7 +8306,9 @@ begin
env := EnvironmentAsStringList;
DebuggerEnvironment := env;
env.Free;
{$ifNdef MSWindows}
DebuggerEnvironment.Values['LANG'] := 'C'; // try to prevent GDB from using localized messages
{$ENDIF}
if CreateDebugProcess(Options)
then begin

View File

@ -340,7 +340,7 @@ type
gptrEvalExpr2, gptrEvalExprDeRef2, gptrEvalExprCast2, // used by MaybeString
gptrPtypeCustomAutoCast, gptrPtypeCustomAutoCast2,
gptrInstanceClassName,
gptrPtypeCustomEval
gptrEvalCustomEval
);
TGDBTypeProcessRequests = set of TGDBTypeProcessRequest;
@ -2073,7 +2073,7 @@ function TGDBType.RequireRequests(ARequired: TGDBTypeProcessRequests; ACustomDat
gptrPtypeCustomAutoCast, gptrPtypeCustomAutoCast2:
Result := GdbCmdPType + ACustomData;
gptrInstanceClassName: Result := GdbCmdEvaluate+Quote('(^^^char('+FExpression+')^+3)^');
gptrPtypeCustomEval: Result := GdbCmdEvaluate+Quote(ACustomData);
gptrEvalCustomEval: Result := GdbCmdEvaluate+Quote(ACustomData);
end;
end;
@ -2096,7 +2096,7 @@ begin
for i := low(TGDBTypeProcessRequest) to high(TGDBTypeProcessRequest) do
if i in NeededReq then begin
AddTypeReq(FReqResults[i], GetReqText(i));
if i in [gptrEvalExpr, gptrEvalExprDeRef, gptrEvalExprCast, gptrInstanceClassName]
if i in [gptrEvalExpr, gptrEvalExprDeRef, gptrEvalExprCast, gptrInstanceClassName, gptrEvalCustomEval]
then FReqResults[i].ReqType := gcrtEvalExpr
else FReqResults[i].ReqType := gcrtPType;
end;
@ -2762,10 +2762,10 @@ var
exit;
end;
if not RequireRequests([gptrPtypeCustomEval], '^^longint('+FExpression+')[-1]') then exit;
if not IsReqError(gptrPtypeCustomEval, False) then begin
if not RequireRequests([gptrEvalCustomEval], '^^longint('+FExpression+')[-1]') then exit;
if not IsReqError(gptrEvalCustomEval, False) then begin
FBoundLow := 0;
FBoundHigh := StrToIntDef(GetParsedFromResult(FReqResults[gptrPtypeCustomEval].Result.GdbDescription, 'value'), -1);
FBoundHigh := StrToIntDef(GetParsedFromResult(FReqResults[gptrEvalCustomEval].Result.GdbDescription, 'value'), -1);
FLen := FBoundHigh + 1;
end;

View File

@ -17,9 +17,9 @@ object WatchPropertyDlg: TWatchPropertyDlg
AnchorSideTop.Control = txtExpression
AnchorSideTop.Side = asrCenter
Left = 6
Height = 16
Top = 9
Width = 59
Height = 15
Top = 10
Width = 58
BorderSpacing.Left = 6
Caption = 'Expression:'
ParentColor = False
@ -28,9 +28,9 @@ object WatchPropertyDlg: TWatchPropertyDlg
AnchorSideTop.Control = txtRepCount
AnchorSideTop.Side = asrCenter
Left = 6
Height = 16
Top = 38
Width = 76
Height = 15
Top = 39
Width = 75
BorderSpacing.Left = 6
Caption = 'Repeat Count:'
ParentColor = False
@ -40,10 +40,10 @@ object WatchPropertyDlg: TWatchPropertyDlg
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = txtDigits
AnchorSideTop.Side = asrCenter
Left = 160
Height = 16
Top = 38
Width = 34
Left = 159
Height = 15
Top = 39
Width = 33
BorderSpacing.Left = 12
Caption = 'Digits:'
ParentColor = False
@ -52,10 +52,10 @@ object WatchPropertyDlg: TWatchPropertyDlg
AnchorSideLeft.Control = lblExpression
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Side = asrBottom
Left = 71
Left = 70
Height = 23
Top = 6
Width = 343
Width = 344
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 6
@ -67,7 +67,7 @@ object WatchPropertyDlg: TWatchPropertyDlg
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = txtExpression
AnchorSideTop.Side = asrBottom
Left = 88
Left = 87
Height = 23
Top = 35
Width = 60
@ -81,13 +81,13 @@ object WatchPropertyDlg: TWatchPropertyDlg
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = txtRepCount
AnchorSideTop.Side = asrCenter
Left = 200
Left = 198
Height = 23
Top = 35
Width = 60
BorderSpacing.Left = 6
BorderSpacing.Top = 6
TabOrder = 4
TabOrder = 3
Text = '0'
end
object chkEnabled: TCheckBox
@ -101,7 +101,7 @@ object WatchPropertyDlg: TWatchPropertyDlg
BorderSpacing.Left = 6
BorderSpacing.Top = 6
Caption = 'Enabled'
TabOrder = 5
TabOrder = 4
end
object chkAllowFunc: TCheckBox
AnchorSideLeft.Control = chkEnabled
@ -156,7 +156,7 @@ object WatchPropertyDlg: TWatchPropertyDlg
'Default'
'Memory Dump'
)
TabOrder = 3
TabOrder = 6
end
object ButtonPanel: TButtonPanel
AnchorSideTop.Control = rgStyle
@ -177,7 +177,7 @@ object WatchPropertyDlg: TWatchPropertyDlg
CloseButton.Enabled = False
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 6
TabOrder = 7
ShowButtons = [pbOK, pbCancel, pbHelp]
ShowBevel = False
end
@ -192,6 +192,6 @@ object WatchPropertyDlg: TWatchPropertyDlg
Width = 129
BorderSpacing.Left = 6
Caption = 'chkUseInstanceClass'
TabOrder = 7
TabOrder = 5
end
end

View File

@ -838,11 +838,15 @@ begin
end;
// make the hint have the same BiDiMode as the activating control
//FHintWindow.BiDiMode := FHintControl.BiDiMode;
FHintWindow.BiDiMode := FHintControl.BiDiMode;
// calculate the width of the hint based on HintStr and MaxWidth
with HintInfo do
HintWinRect := FHintWindow.CalcHintRect(HintMaxWidth, HintStr, HintData);
OffsetRect(HintWinRect, HintInfo.HintPos.X, HintInfo.HintPos.Y);
//Position HintWindow depending on LTR/RTL
if FHintWindow.UseRightToLeftAlignment then
OffsetRect(HintWinRect, HintInfo.HintPos.X - (HintWinRect.Right - HintWinRect.Left), HintInfo.HintPos.Y)
else
OffsetRect(HintWinRect, HintInfo.HintPos.X, HintInfo.HintPos.Y);
//DebugLn(['TApplication.ShowHintWindow HintStr="',HintInfo.HintStr,'" HintWinRect=',dbgs(HintWinRect)]);
{if FHintWindow.UseRightToLeftAlignment then
with HintWinRect do

View File

@ -244,6 +244,8 @@ end;
function THintWindow.CalcHintRect(MaxWidth: Integer; const AHint: String;
AData: Pointer): TRect;
var
Flags: Cardinal;
begin
if AHint = '' then
begin
@ -253,12 +255,14 @@ begin
if MaxWidth <= 0 then
MaxWidth := Screen.Width - 4 * HintBorderWidth;
Result := Rect(0, 0, MaxWidth, Screen.Height - 4 * HintBorderWidth);
Flags := DT_CALCRECT or DT_NOPREFIX or DT_WORDBREAK;
if UseRightToLeftAlignment then Flags := Flags or DT_RTLREADING;
if UseThemes then
Result := ThemeServices.GetTextExtent(Canvas.GetUpdatedHandle([csFontValid]),
ThemeServices.GetElementDetails(tttStandardNormal), AHint, DT_NOPREFIX or DT_WORDBREAK, @Result)
ThemeServices.GetElementDetails(tttStandardNormal), AHint, Flags, @Result)
else
DrawText(Canvas.GetUpdatedHandle([csFontValid]), PChar(AHint), Length(AHint),
Result, DT_CALCRECT or DT_NOPREFIX or DT_WORDBREAK);
Result, Flags);
inc(Result.Right, 4 * HintBorderWidth);
inc(Result.Bottom, 4 * HintBorderWidth);
//debugln('THintWindow.CalcHintRect Result=',dbgs(Result));