Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erro de execução com Lazarus 3.0, FPC 3.2.2, Ubuntu 23.10 e Horse Trunk #360

Open
edsontmarques opened this issue Sep 19, 2023 · 5 comments
Labels
bug Something isn't working lazarus

Comments

@edsontmarques
Copy link

Criei um projeto simples de teste com o código de exemplo que encontra-se em https://github.com/HashLoad/horse.
Configurei o Project Options definindo os Build Modes padrões criados pelo Lazarus (Project Options > Compiler Options > Botão '...' no topo do form).
Com isso o Lazarus cria os Build Modes "Release" e "Debug".
Ajustei o Build Mode para Debug e Rodei a API básica com o Lazarus.
Entrei no Firefox e enviei a requisição "localhost:9000/ping".

O Lazarus levantou uma exceção de "Invalid Typecast" na unit Horse.Core.RouterTree.NextCaller linha 89.
Deixei continuar a execução e o firefox me mostrou o seguinte retorno:

`The application encountered the following error:

Error: Invalid type cast
Stack trace:
$00000000005DE23D Next, line 89 of ../../../../../frameworks/fpc/horse/src/Horse.Core.RouterTree.NextCaller.pas
$00000000004E566F ExecuteInternal, line 187 of ../../../../../frameworks/fpc/horse/src/Horse.Core.RouterTree.pas
$00000000004E5401 Execute, line 149 of ../../../../../frameworks/fpc/horse/src/Horse.Core.RouterTree.pas
$00000000005E050A HandlerAction, line 94 of ../../../../../frameworks/fpc/horse/src/Horse.WebModule.pas
$00000000005E03CB DoOnRequest, line 79 of ../../../../../frameworks/fpc/horse/src/Horse.WebModule.pas
$00000000005E13A4`

Fazendo alguns testes na configuração do Build Mode Debug gerado pelo Lazarus, percebi que se Desligarmos o parâmetro Project Options > Compiler Options > Debugging > Checks and assertion > Verify method calls (-CR) , o erro acima não acontece e o retorno para requisição é "Pong", como esperado.

@viniciussanchez viniciussanchez added the bug Something isn't working label Sep 19, 2023
@viniciussanchez viniciussanchez moved this to Todo in Horse Sep 19, 2023
@Valmadson
Copy link

Aproveitando a observação do Edson, gostaria também de relatar que utilizando o lazarus 3.99 trunk , um simples ping/pong apresenta a seguinte mensagem abaixo :  

  • (mesmo com a Veryfi method calls (-CR) desabilitado)

    • (Já no windows versão 2.2.6 stable do lazarus funciona normal)

SOs: Manjaro e Pop! OS

This binary has no thread support compiled in.
Recompile the application with a thread-driver in the program uses clause before other units using thread.
Runtime error 232 at $000000000041B2C3
$000000000041B2C3
$000000000046A8DE  LISTEN,  line 142 of ../horse/src/Horse.Provider.FPC.HTTPApplication.pas

@viniciussanchez
Copy link
Member

@edsontmarques @Valmadson acharam alguma solução para o problema? Não tivemos mais relatos quanto a esse tipo de situação...

@edsontmarques
Copy link
Author

Vinícius, Infelizmente estive envolvido com vários problemas fora da área de programação e precisei deixar o desenvolvimento da API no ponto que estava. Não tive como voltar a verificar se o problema continua acontecendo ou se mudou com as novas versões do Lazarus e FPC.

@josedachao
Copy link

Edson, vc está rodando em Linux, não é? Verifique como está declarada a unit CThreads na Unit principal do seu projeto. Veja se está como abaixo e ela tem que vir antes da declaração da Unit do horse:
tente adicionar essa unit antes do horse:

{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Horse;

Além do -CR

@edsontmarques
Copy link
Author

Então...
O meu dpr está assim:

program project1;

{$MODE DELPHI}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Horse;

procedure GetPing(Req: THorseRequest; Res: THorseResponse);
begin
  Res.Send('Pong');
end;

begin
  THorse.Get('/ping', GetPing);
  THorse.Listen(9000);
end.   

E como expliquei antes, quando a gente ajusta a configuração do Lazarus para ele criar automaticamente os "build mode", o -CR é já vem setado para o mode debug.

Aproveito para responder ao Vinicius ... Acabei de refazer o mesmo teste do início deste post (tomando o cuidado de atualizar o meu repositório do horse com o da hashload) e o caso relatado continua acontecendo.

"
Project project1 raiser exception class 'EInvalidCast'.
In file 'Horse.Core.RouterTree.NextCaller.pas'at line 89:
else if (FPath.Count = 0) and Assigned(FCallBack) then
"

Confirmo também que basta entrar nas configurações do projeto e remover o -CR que a issue não ocorre.

Infelizmente não estou com condições de aprofundar a pesquisa por uma solução no momento.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working lazarus
Projects
Status: Todo
Development

No branches or pull requests

4 participants