Erros, bugs, perguntas - página 822

 
falkov:

Sim, é claro, e daí? Passei por todo o tipo de verificações.

Conheço o lugar, não percebo porque é que isso acontece!

Verifico o tamanho da matriz antes desta linha e de outras variáveis para valores aberrantes.

Mas mesmo assim o Expert Advisor cai algumas vezes por semana.

Este é muito provavelmente o meu erro, e não sou contra. Sou contra o facto de não ter quaisquer mecanismos para descobrir onde o cão está enterrado.

Ao mesmo tempo, existe um mecanismo de exclusão simples e conveniente. Foram introduzidos apenas para esses casos.

Renat respondeu-me que se eles introduzirem este mecanismo, os programadores insensatos começarão imediatamente a cometer erros e terão de o limpar.

Esse é um argumento ridículo, na minha opinião.

Bem, a posição da MetaQuotes sobre excepções é bem conhecida e irrevogável (eu próprio a discuti com eles há 2 anos atrás), por isso limitamo-nos a fazer com o que temos. Teria sido mais útil se alguma da sua fonte tivesse sido mostrada.
 

A propósito, como alternativa às excepções, poderia implementar um simples manipulador de eventos OnError, como este:

bool OnError(uint errorcode, string filename, uint lineno, uint colno, string context)
{
  ...
  if(critical)
  {
    return(true); // для подтверждения остановки выполнения скрипта
  }
  else
  {
    return(false); // для продолжения выполнения на чарте (текущий вызов прерывается, но следующие тики/таймеры и пр. работают)
  }
}
 
Utilizar o verificador de código incorporado, as mesmas afirmações.
 
marketeer:

A propósito, como alternativa às excepções, poderia implementar um simples manipulador de eventos OnError, como este:


Penso que isso me teria satisfeito, embora não completamente, pois teria precisado de declarar as variáveis necessárias como globais para ser visível no OnError.

Mas eu ficaria feliz com isso de qualquer maneira. Por vezes basta apanhar um erro, depois de encontrar e resolver o problema pode escondê-lo no local de novo.

Como transmitir esta ideia sobre a OnError à Renat?

 
falkov:

Penso que me satisfez, embora não completamente, porque teria sido necessário declarar as variáveis exigidas como globais para serem visíveis no OnError.

Mas eu teria ficado feliz com isso de qualquer maneira. Basta apanhar um erro por vezes, depois de encontrar e resolver o problema pode escondê-lo no local de novo.

Como obter esta ideia sobre a OnError para a Renat?

Não como uma questão de princípio. Se um programa se deparar com um erro crítico, o seu destino será apenas o de ser descarregado.

Cada função importante tem códigos de retorno, tudo é detalhado. Portanto, o programador não perde o controlo sobre o seu programa.

ps: é espantoso, claro, ouvir "não chega!" mesmo depois de uma clara indicação do local de indexação errada.

 
TheXpert:
Utilizar a verificação do código incorporado, as mesmas afirmações.

Bem, a situação aqui é diferente. Uma pessoa tem um erro esporádico (reproduzido raramente em condições pouco claras). O Conselheiro Especialista cai de qualquer forma. Se ele definir Assert, receberá o mesmo erro mas não imediatamente e não será claro porquê. É por isso que lhe estou a pedir que me mostre o código.

E por último, poderia ser útil se tais erros que causam a paragem do guião fossem acompanhados não só pela localização, mas também pelo contexto completo: pilha de chamadas, conteúdo de variáveis, etc. Pode tornar essa saída opcional usando a directiva de pré-processador, ou seja, especificar o nível de diagnóstico de erros: deixá-lo como está por defeito mas permitir que seja semelhante.

Документация по MQL5: Основы языка / Препроцессор
Документация по MQL5: Основы языка / Препроцессор
  • www.mql5.com
Основы языка / Препроцессор - Документация по MQL5
 
marketeer:

Bem, a situação aqui é diferente. Uma pessoa tem um erro esporádico (reproduzido raramente em condições pouco claras). O Conselheiro Especialista cai de qualquer forma. Se ele definir Assert, receberá o mesmo erro mas não imediatamente e não será claro porquê. É por isso que lhe estou a pedir que me mostre o código.

E por último, poderia ser útil se tais erros que causam a paragem do guião fossem acompanhados não só pela localização, mas também pelo contexto completo: pilha de chamadas, conteúdo de variáveis, etc. É possível tornar essa saída opcional utilizando a directiva de pré-processador, ou seja, especificar o nível de diagnóstico de erros: deixá-la como está por defeito, mas torná-la opcional.

O contexto completo pode ser traçado durante a depuração.

Outra coisa é que os erros esporádicos devem ser apanhados em certos fragmentos.

E é aí que entra a necessidade. Executar debugger na história.

O problema é antigo e já foi levantado muitas vezes, mas ainda lá está.

 
marketeer:

Bem, a situação aqui é diferente. Uma pessoa tem um erro esporádico (reproduzido raramente em condições pouco claras). O Conselheiro Especialista cai de qualquer forma. Se ele definir Assert, receberá o mesmo erro mas não imediatamente e não será claro porquê. É por isso que lhe estou a pedir que me mostre o código.

95% dos erros esporádicos estão relacionados com erros de inicialização ou falta deles. Portanto, um fragmento de código não ajudará e o código inteiro não lhe dará a resposta por causa da paranóia ;-)

A razão deve ser procurada muito longe do local de manifestação, e é aborrecido para aphthar exigir apenas que os criadores sejam fuzilados. Ajudará com certeza.

// Vai realmente ajudar, falkov ? : )

 
Urain:

O contexto completo pode ser traçado através de depuração.

Outra coisa é que os erros esporádicos devem ser apanhados em certos fragmentos.

E é aí que surge a necessidade. Executar debugger sobre a história.

O problema é antigo e já foi levantado muitas vezes, mas continua a existir.

Também é verdade que ajudaria muito, independentemente da natureza do erro.
 
marketeer:

Bem, a situação aqui é diferente. Uma pessoa tem um erro esporádico (reproduzido raramente em condições pouco claras). O Conselheiro Especialista cai de qualquer forma. Se ele definir Assert, receberá o mesmo erro mas não imediatamente e não será claro porquê. Foi por isso que lhe pedi que me mostrasse o código.

Não vale a pena mostrar o código, porque há uma lógica bastante complicada, quem precisa de o compreender, e a secção de erro em si é simples, mas não dá nada para encontrar o erro, há um meio ecrã de código puro. Cada variável é verificada quanto a limites na parte inferior e na parte superior. Se a variável exceder estes limites, é exibida uma mensagem listando todas as variáveis e os seus valores. Claro que há um erro algures, mas é aí que está!!! Deixem-me lembrar-vos que isto acontece uma ou duas vezes por semana. O Conselheiro Especialista tem trabalhado 24 horas por dia.

E depois estou interessado não só neste caso em particular, embora seja a minha primeira vez.

E uma última coisa, talvez fosse útil se tais erros que fazem com que o guião pare, fossem acompanhados não só pela localização, mas com contexto completo: pilha de chamadas, conteúdo de variáveis, etc. Pode tornar essa saída opcional utilizando a directiva de pré-processador, ou seja, especificar o nível de diagnóstico de erros: deixá-lo como está por defeito, mas permitir torná-lo mais complexo.

Isso seria óptimo! Um contexto completo permitir-me-ia certamente encontrar o erro! O que eu preciso é de olhar para as variáveis no momento do erro, antes de o Expert Advisor sair.

Caro Renat! Talvez consiga fazer isto?

Razão: