How to find this in the debuuger:

If you are on the crash, you have this stacktrace:
#0 INHERITSFROM(0xf0f0f0f0, 0xb8f888) at ..\inc\objpas.inc:529
#1 GETOBJECTPROP(0xf0f0f0f0, 0xb8f888, 0xb8f888) at ..\objpas\typinfo.pp:1170
#2 ?? at :0
#3 ?? at :0
#4 GETCOLLECTIONS(0xf019308, 0xeb82c70, {Proc = {procedure (POINTER, TCOLLECTION)} 0xa20f02c, Self = 0xf019308}) at componenttreeview.pas:133
#5 WALK(0xf019308, 0xeb82c70) at componenttreeview.pas:174
#6 GETCHILDREN(0xeeba128, {Proc = {procedure (POINTER, TCOMPONENT)} 0xa20f0c4, Self = 0xf019308}, 0xee1fa98) at tagraph.pas:988
#7 WALK(0xf019308, 0xeeba128) at componenttreeview.pas:182
#26 REMOVECOMPONENT(0xf0f0f0f0, 0xb8f888) at ..\objpas\classes\compon.inc:618
....

** Select Frame 1:
----------
Function GetObjectProp(Instance: TObject; PropInfo : PPropInfo; MinClass: TClass): TObject;
begin
.....
  If (MinClass<>Nil) and (Result<>Nil) Then
If Not Result.InheritsFrom(MinClass) then // << current line <<<<<<<<<
      Result:=Nil;
end;
----------

Looking at Result:   TObject ($0DD5CD40) {  _vptr$TOBJECT = $f0f0f0f0}
=> this object was destroyed before

So what was it?
** Look at frame 4:
----------
procedure TComponentWalker.GetCollections(AComponent: TComponent; AProc: TGetCollectionProc);
....
begin
  PropCount := GetPropList(AComponent, PropList);
  try
    for i := 0 to PropCount - 1 do
      if (PropList^[i]^.PropType^.Kind = tkClass) then
      begin
Obj := GetObjectProp(AComponent, PropList^[i], TCollection); << current line <<<<<<<<<<<<<<<
.....
-----------
We are looking at all published properties of AComponent

What is AComponent?
We may not have the Class, but we have the name: ChartTSummer => looking at the Form in the OI => it is a TLineSeries

using ctrl-F1 (evaluate/modify), we can evaluate:
  TLineSeries(AComponent)^

We see all the variables, some properties =>all we need is to search wich one has a value of $0DD5CD40 (pointing to the destroyed object)
=> its FMarks




On 11/04/2010 14:55, Martin wrote:
On 11/04/2010 13:57, Alexander Klenin wrote:
Can anyone help me with http://bugs.freepascal.org/view.php?id=16035 ?
This code is so complicated, I can not understand what is going on.
It may be a bug in TAChart itself, but I do not see it either.
Now that the user was burned by the issue
(see http://bugs.freepascal.org/view.php?id=16254),
I think the priority has risen somewhat.

Not sure if it helps.

but I found the following:

When it crashes, it reads the Property (and tries to perform an "is TCollection" on it)
  TLineSeries.Marks

(in this case ChartTSummer)

However it Seems that Marks has a dangling pointer to a destroyed object.

I don't know where it may have been destroyed, nor if that should have removed the pointer.

Martin



--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to