[Lazarus] Need testers for the a new debugger
Joost van der Sluis
joost at cnoc.nl
Sun Aug 24 17:44:55 CEST 2014
On 07/21/2014 10:11 PM, C Western wrote:
> Managed to create a small test program:
>
> program tproj;
>
> uses sysutils;
>
> procedure a(const s: string);
> var
> a: string;
> r: array [0..10] of Double;
> begin
> a := s+s+s;
> r[8] := StrToFloat(a);
> WriteLn(a, ' ', r[8])
> end;
>
> begin
> a('6'); <<-Set break point here, and hit step into here twice
> end.
>
> First step into ends on begin in procedure, second on final end.
> Seems to be related to size of stack frame - if I didn't have the
> array in, it works as expected. I compiled it with all stack checks on.
>
> I know this stuff can be difficult - I have certainly seen some odd
> things with Delphi and gdb. My hope is we can resolve some of these
> things as we now have control over all parts of the system.
Solving this particular problem was easy, but debugging your
test-application opened a whole new can of worms.
I've re-written the step-into-line code completely. It's not fool-proof,
but at least it works stepping into a procedure one level deep. (That
means: if the procedure being called has debug-info.) If it does not
have debug-info but another procedure with debug info is called
further-on, it will probably work.
The problem lies in functions that do not set the stack-frame. Among
those are the compiler-procedures. If two of those are called after each
other, the debugger can loose track...
So, please test. I'm convinced that a solution that always works and is
also reasonable fast is impossible. (gdb also makes comparable mistakes)
Oh, and I added re-direction of the console in- and output to the
console-debug screen.
Joost.
More information about the Lazarus
mailing list