[Lazarus] How to make debugging ignore exceptions?
Santiago A.
svaa at ciberpiula.net
Sat Jun 24 10:15:01 CEST 2017
El 24/06/2017 a las 0:14, Bo Berglund via Lazarus escribió:
The problem is that the debugger always stops on the
> exceptions making the debugging impossible (they happen with 10 ms
> intervals).
When I run into a program that raises a lot of exceptions in a loop, I
think that I'm doing something wrong, I have missed some check or data
sanitation in the loop. Exceptions are for exceptional cases. I mean,
errors or unexpected cases. A case that happens each 10 ms is not an
error or an exceptional case, it's one of the usual cases, and it must
be handled by the natural flow of the program in a structured way.
Raising continuously exceptions is not only an annoyance for debugging,
but a performance problem. Exceptions may be expensive.
For example, if you are going to process a file with lines that are
integers and alphanumeric strings, and you want to sum only the
integers, instead of
sum:=0;
While not eof(f) do begin
readln(f,Line);
try
num:=StrToInt(Line);
sum:=sum+num;
except
end
end;
you should use
sum:=0;
While not eof(f) do begin
readln(f,Line);
val(num,Line,code);
if code=0
then Sum:=Sum+num;
end;
end;
I don't know the FTcpComm component. Isn't there a way to check first if
that annoying exception is going to be raised?. Probably there are
functions like "IsReadDataReady" and "isSerWriteReady", so you can avoid
a lot of exceptions
if FTcpComm.IOHandler.IsReadDataReady() then begin
FTcpComm.IOHandler.ReadBytes(Buf, BufLen, false);
if (Length(Buf) > 0) and isSerWriteReady(FOmH) then
begin
SerWrite(FComH, Buf[0], Length(Buf));
SetLength(Buf, 0);
end;
end;
Or with several retries in loops with a sleep.
--
Saludos
Santiago A.
More information about the Lazarus
mailing list