Errores, fallos, preguntas - página 822

 
falkov:

Sí, claro, y qué. He sometido el lugar a todo tipo de comprobaciones.

Conozco el lugar, ¡no entiendo por qué sucede!

Compruebo el tamaño de la matriz antes de esta línea y otras variables para los valores atípicos.

Pero aún así el Asesor Experto se bloquea un par de veces a la semana.

Lo más probable es que sea un error mío, y no estoy en contra de ello. Estoy en contra del hecho de que no tengo ningún mecanismo para averiguar dónde está enterrado el perro.

Al mismo tiempo, existe un mecanismo de exclusión sencillo y cómodo. Se introdujeron justo para estos casos.

Renat me contestó que si introducen este mecanismo, los programadores imprudentes empezarán inmediatamente a cometer errores y tendrán que limpiarlo.

Ese es un argumento ridículo, en mi opinión.

Bueno, la posición de MetaQuotes sobre las excepciones es bien conocida e irrevocable (yo mismo lo discutí con ellos hace 2 años), así que nos conformamos con lo que tenemos. Habría sido más útil si se hubiera mostrado alguna de sus fuentes.
 

Por cierto, como alternativa a las excepciones, podrías implementar un simple manejador de eventos OnError, como este

bool OnError(uint errorcode, string filename, uint lineno, uint colno, string context)
{
  ...
  if(critical)
  {
    return(true); // для подтверждения остановки выполнения скрипта
  }
  else
  {
    return(false); // для продолжения выполнения на чарте (текущий вызов прерывается, но следующие тики/таймеры и пр. работают)
  }
}
 
Utiliza el comprobador de código incorporado, las mismas aserciones.
 
marketeer:

Por cierto, como alternativa a las excepciones, podrías implementar un simple manejador de eventos OnError, como este


Creo que eso me habría satisfecho, aunque no del todo, ya que habría necesitado declarar las variables necesarias como globales para que fueran visibles en OnError.

Pero de todos modos me alegraría. A veces sólo hay que detectar un error, después de encontrar y solucionar el problema se puede volver a ocultar en el local.

¿Cómo se podría transmitir esta idea sobre OnError a Renat?

 
falkov:

Creo que me satisfizo, aunque no del todo, porque hubiera sido necesario declarar las variables requeridas como globales para que fueran visibles en OnError.

Pero de todos modos me habría alegrado. Sólo hay que coger un error a veces, después de encontrar y arreglar el problema podría ocultarlos en local de nuevo.

¿Cómo llevar esta idea de OnError a Renat?

No como una cuestión de principios. Si un programa se encuentra con un error crítico, su destino es sólo ser descargado.

Cada función importante tiene códigos de retorno, todo está detallado. Por lo tanto, el desarrollador no pierde el control de su programa.

ps: es sorprendente, por supuesto, escuchar "¡no es suficiente!", incluso después de una clara indicación del lugar de desindexación.

 
TheXpert:
Utilizar la comprobación de código incorporada, las mismas aserciones.

Bueno, la situación aquí es diferente. Una persona tiene un error esporádico (que se reproduce raramente en condiciones poco claras). El Asesor Experto se bloquea de todos modos. Si pone Assert, obtendrá el mismo error pero no inmediatamente y no estará claro por qué. Por eso le pido que me enseñe el código.

Y por último, podría ser útil que esos errores que hacen que el script se detenga fueran acompañados no sólo de la ubicación, sino del contexto completo: pila de llamadas, contenido de las variables, etc. Puede hacer que dicha salida sea opcional utilizando la directiva del preprocesador, es decir, especificar el nivel de diagnóstico de errores: déjelo como está por defecto pero permita que sea similar.

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

Bueno, la situación aquí es diferente. Una persona tiene un error esporádico (que se reproduce raramente en condiciones poco claras). El Asesor Experto se bloquea de todos modos. Si pone Assert, obtendrá el mismo error pero no inmediatamente y no estará claro por qué. Por eso le pido que me enseñe el código.

Y por último, podría ser útil que esos errores que hacen que el script se detenga fueran acompañados no sólo de la ubicación, sino del contexto completo: pila de llamadas, contenido de las variables, etc. Es posible hacer que esta salida sea opcional utilizando la directiva del preprocesador, es decir, especificar el nivel de diagnóstico de errores: déjelo como está por defecto, pero haga posible incrementarlo.

El contexto completo puede ser rastreado durante la depuración.

Otra cosa es que los errores esporádicos deban captarse en determinados fragmentos.

Y ahí es donde surge la necesidad. Ejecutar el depurador en el historial.

El problema es antiguo y se ha planteado muchas veces, pero sigue ahí.

 
marketeer:

Bueno, la situación aquí es diferente. Una persona tiene un error esporádico (que se reproduce raramente en condiciones poco claras). El Asesor Experto se bloquea de todos modos. Si pone Assert, obtendrá el mismo error pero no inmediatamente y no estará claro por qué. Por eso le pido que me enseñe el código.

El 95% de los errores esporádicos están relacionados con errores de inicialización o con la falta de ella. Por lo tanto, un fragmento de código no servirá de nada y todo el código no servirá por paranoia ;-)

La razón debe buscarse muy lejos del lugar de la manifestación, y es aburrido para el afthar sólo exigir que se dispare a los promotores. Seguro que le ayudará.

// Será de gran ayuda, falkov : )

 
Urain:

El contexto completo puede ser rastreado por la depuración.

Otra cosa es que los errores esporádicos se detecten en determinados fragmentos.

Y ahí es donde surge la necesidad. Ejecutar el depurador en el historial.

El problema es antiguo y se ha planteado muchas veces, pero sigue ahí.

También es cierto que ayudaría mucho independientemente de la naturaleza del error.
 
marketeer:

Bueno, la situación aquí es diferente. Una persona tiene un error esporádico (que se reproduce raramente en condiciones poco claras). El Asesor Experto se bloquea de todos modos. Si pone Assert, obtendrá el mismo error pero no inmediatamente y no estará claro por qué. Por eso le pedí que me enseñara el código.

No tiene sentido mostrar el código, porque hay una lógica bastante complicada, que necesita entender, y la sección de error en sí es simple, pero no da nada para encontrar el error, hay media pantalla de puro código. Se comprueba que cada variable tiene límites en la parte inferior y en la superior. Si la variable supera estos límites, se muestra un mensaje con una lista de todas las variables y sus valores. Por supuesto que hay un error en alguna parte, ¡¡¡pero ahí está!!! Permítanme recordarles que esto ocurre una o dos veces por semana. El Asesor Experto ha estado trabajando sin descanso.

Y entonces me interesa no sólo este caso en particular, aunque es mi primera vez.

Y una última cosa, quizás sería útil que esos errores que hacen que el script se detenga, fueran acompañados no sólo de la ubicación, sino del contexto completo: pila de llamadas, contenido de las variables, etc. Se puede hacer que esta salida sea opcional mediante una directiva del preprocesador, es decir, especificar el nivel de diagnóstico de errores: dejarlo como está por defecto, pero permitir hacerlo más complejo.

¡Eso sería genial! ¡Un contexto completo me permitiría sin duda encontrar el error! Lo que necesito es mirar las variables en el momento del error, antes de que salga el Asesor Experto.

¡Querido Renat! ¿Tal vez puedas hacer esto?