[Lazarus] properties (delphi does it wrong too) [Re: debugger feature request created]
Martin
lazarus at mfriebe.de
Fri Oct 2 13:12:09 CEST 2009
Horacio Jamilis wrote:
> I disagree with you. Most getter functions only do that, get the value
> without changing anything, but are functions because the resulting
> value is processed.
> A property getter function, can, but should not, change anything.
> Even if the getter changes something, it´s up to you, as a developer,
> to inspect such property or not...
> I use this every day on Delphi and, in my work, is an invaluable tool,
> that lazarus should have.
> May be, for people like you, in the debugger options page, could be an
> option to disable this funcionatility for tooltip debugging or for all
> the debugging, but this should be enabled by default.
The feature that is missing in lazarus is "function evaluation" and yes
it is (yet) missing.
As for how valuable it is, is a personal question. I rarely need it,
some other people can not live without it.
As for "Most getter functions only do that, get the value ": I don't
have delphi sources, I cannot check. But for example the property
"Handle" afaik does change things (if no handle has been allocated it
will do that, including requesting it from the OS).
And delphi is inconsistent in that.
property Foo read GetFoo;
if i put "foo" and "getFoo" in my watches window, then:
- Foo is evaluated (despite the fact that "function evaluation" is NOT
ticked on the watches property)
If you ask me, it should *only* work, if explicit enabled.
- getFoo is not evaluated (correct because "function evaluation" is NOT
ticked on the watches property)
So why is "Foo" evaluating a function, even so this is not enabled by
the settings for this watch? That is a bug if you ask me, and a severe
one, since it can thrash hours of debugging work.
Oh yes, of course, I know when I add it as a watch. Actually I may do,
but someone new to deplhi doesn't (I was once new to it too), so they
get screwed...
And keep in mind, even a function that is not supposed to modify thinks
can end up doing so. Evaluating the function, at a time the function was
not meant to be called, may cause a crash, and may cause memory
corruption..... There are plenty of hidden dangers, they may only occur
in a few situations, but the can and will. And there is no warning at
all, Simple pointing your mouse on a property (and getting hint
evaluation) can destroy hours of debugging effort (again no warning...)
And if the property has a function that does modifications: if you put
it in the watches and then run the hint too => you see different values
(because they changed in between)
I agree "function evaluation" in the debugger can be a very helpful
feature. That is it is helpful when used intentionally, sot the
developer knows what side-effects may happen.
The way Delphi has it, doing it with no warning at all => very dangerous.
Best Regards
Martin
More information about the Lazarus
mailing list