Pode ser teoricamente possível para um ambiente de tempo de execução para verificar se esses laços usando o seguinte procedimento:
Após a execução das instruções, o ambiente de tempo de execução criaria uma imagem completa do estado de um processo em execução (ou seja, toda a memória associada a ele, incluindo registradores, PC, pilha, pilha e globais), salvaria a imagem em algum lugar e, em seguida, verificaria veja se corresponde a alguma de suas imagens salvas anteriormente para esse processo. Se houver uma correspondência, o processo ficará preso em um loop infinito. Caso contrário, a próxima instrução é executada e o processo é repetido.
De fato, em vez de executar essa verificação após cada instrução, o ambiente de tempo de execução pode simplesmente pausar o processo periodicamente e criar um estado de salvamento. Se o processo estiver preso em um loop infinito envolvendo n estados, depois de no máximo n verificações, será observado um estado duplicado.
Note, é claro, que essa não é uma solução para o problema da parada; a distinção é discutida aqui .
Mas esse recurso seria um enorme desperdício de recursos ; pausar continuamente um processo para economizar toda a memória associada a ele diminuiria tremendamente e consumiria uma quantidade enorme de memória rapidamente. (Embora as imagens antigas possam ser excluídas depois de um tempo, seria arriscado limitar o número total de imagens que poderiam ser salvas porque um loop infinito grande - ou seja, um com muitos estados - pode não ser capturado se houver muito poucos Além disso, esse recurso não traria tanto benefício, pois sua capacidade de capturar erros seria extremamente limitada e porque é relativamente simples encontrar loops infinitos com outros métodos de depuração (como simplesmente percorrer o código e reconhecendo o erro lógico).
Portanto, duvido que esse ambiente de tempo de execução exista ou que jamais exista, a menos que alguém o programa apenas por diversão. (O que estou um pouco tentado a fazer agora.)