On 15.09.2013 03:21, Marcos Douglas wrote:
Hi,

1) I have a code like that:

procedure TghSQLConnector.Connect;
begin
   try
     FLib.Connect;
   except
     on E: Exception do
       DoOnException(E);
   end;
end;

  https://github.com/mdbs99/Greyhound/blob/0.1.8/src/ghsql.pas#L1565


2) DoOnException was implemented so:

procedure TghSQLHandler.DoOnException(E: Exception);
begin
   if Assigned(FOnException) then
     FOnException(Self, E)
   else
     raise E;
end;

https://github.com/mdbs99/Greyhound/blob/0.1.8/src/ghsql.pas#L443


So, as you see, if occurs a Exception the code checks if the event
(OnException) was setted. If yes, call user implementation; if no,
call raise E;
It works... but not when I uses in FPCUnit tests.

See a simple test (this works):

procedure TghSQLConnectorTest.TestOnException;
begin
   // catch
   FConn.OnException := @DoOnException;
   FConn.Script.Text := 'foo';
   FConn.Execute;
end;

https://github.com/mdbs99/Greyhound/blob/0.1.8/test/ghsqltest.pas#L246


The code DoOnException is:

procedure TghSQLTest.DoOnException(Sender: TObject; E: Exception);
begin
   AssertTrue(Assigned(E));
end;

https://github.com/mdbs99/Greyhound/blob/0.1.8/test/ghsqltest.pas#L141

So, if I change the test like bellow... BUM! SIGSEGV!!

procedure TghSQLConnectorTest.TestOnException;
begin
   // removed >>> FConn.OnException := @DoOnException;
   FConn.Script.Text := 'foo';
   FConn.Execute;
end;


The ERROR is:
[Content]
Project test raised exception class 'External: SIGSEGV'.

  At address 40B758

Could you as a test replace the

raise E

with

raise E at get_caller_addr(get_frame), get_caller_frame(get_frame);

and check whether this makes a difference?

Could you also compile the RTL with debug information and maybe also without optimizations (CROSSOPT="-gl -O-") and rerun your test and display the stack trace (you'll need to enable "-gl" for your test as well)?

Regards,
Sven

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to