Trace-Aufgabe (Konstruktion eines Funktionsgraphen) - Seite 4

 
Ich habe eine Vorlage wie diese verwendet:
/*
extern bool TraceIsAllowed;                              // Показывать трассировку?
//+------------------------------------------------------------------+
//| XXX
//+------------------------------------------------------------------+
void XXX(string MasterName, string ProgramTrace, string Parameter)
  {
   string SlaveName="XXX";                               // Имя функции.
   ProgramTrace=ProgramTrace+"=>"+SlaveName;             // Путь обращения к функции.
   if( Parameter!="" ) ProgramTrace=ProgramTrace+"("+Parameter+")";
   string Message=ProgramTrace;                          // Функциональные сообщения.
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 )
     {                                                   // Ошибка или некорректные параметры.
      Message=Message+" ERROR "+LastErrorCode+" at Start";
      Message=Message+"";                                // Значения параметров.
      Print(Message); return;                            // Функцию не выполнять.
     }
   if( TraceIsAllowed ) Print(Message);                  // Задана трассировка программы .
//----
   
//----
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode;
   if( Message!=ProgramTrace )
     {                                                   // Были функциональные сообщения.
      Message=Message+" ";                               // Функция выполнена.
      Print(Message);                                    // Печать функциональных сообщений.
     }
   return;
  }
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   string SlaveName="Init";                              // Имя функции.
   string ProgramTrace=SlaveName;                        // Путь обращения к функции.
   string Message=ProgramTrace;                          // Функциональные сообщения.
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 )
     {                                                   // Ошибка или некорректные параметры.
      Message=Message+" ERROR "+LastErrorCode+" at Start";
      Print(Message); return(0);                         // Функцию не выполнять.
     }
   if( TraceIsAllowed ) Print(Message);                  // Задана трассировка программы .
//----
   
//----
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode;
   if( Message!=ProgramTrace )
     {                                                   // Были функциональные сообщения.
      Message=Message+" ";                               // Функция выполнена.
      Print(Message);                                    // Печать функциональных сообщений.
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   string SlaveName="Start";                             // Имя функции.
   string ProgramTrace=SlaveName;                        // Путь обращения к функции.
   string Message=ProgramTrace;                          // Функциональные сообщения.
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 )
     {                                                   // Ошибка или некорректные параметры.
      Message=Message+" ERROR "+LastErrorCode+" at Start";
      Print(Message); return(0);                         // Функцию не выполнять.
     }
   if( TraceIsAllowed ) Print(Message);                  // Задана трассировка программы .
//----
   
//----
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode;
   if( Message!=ProgramTrace )
     {                                                   // Были функциональные сообщения.
      Message=Message+" ";                               // Функция выполнена.
      Print(Message);                                    // Печать функциональных сообщений.
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   string SlaveName="DeInit";                            // Имя функции.
   string ProgramTrace=SlaveName;                        // Путь обращения к функции.
   string Message=ProgramTrace;                          // Функциональные сообщения.
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 )
     {                                                   // Ошибка или некорректные параметры.
      Message=Message+" ERROR "+LastErrorCode+" at Start";
      Print(Message); return(0);                         // Функцию не выполнять.
     }
   if( TraceIsAllowed ) Print(Message);                  // Задана трассировка программы .
//----
   
//----
   LastErrorCode=GetLastError();
   if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode;
   if( Message!=ProgramTrace )
     {                                                   // Были функциональные сообщения.
      Message=Message+" ";                               // Функция выполнена.
      Print(Message);                                    // Печать функциональных сообщений.
     }
   return(0);
  }
*/
//+------------------------------------------------------------------+
 
tara:
Ich habe eine Vorlage wie diese verwendet:

Es ist ein bisschen anders.
 
sergeev:

Ich sehe auch zwei Blöcke im Code, einen am Anfang und einen am Ende... aber ich brauche einen.

Das am Ende hat nichts mit der Rückverfolgung zu tun. Sie können ihn löschen.
 
tara:
Der letzte Punkt ist für die Rückverfolgung irrelevant. Sie können ihn löschen.

Ja. Ich verstehe. Aber trotzdem... wir schauen nicht auf Fehler, sondern auf jede Eingabe in die Funktion.
 
sergeev:

Ja, das sehe ich. Aber trotzdem... Wir achten nicht auf Fehler, sondern auf jede Eingabe in die Funktion.

Fehler können auch verworfen werden.

extern bool TraceIsAllowed;                              // Показывать трассировку?
//+------------------------------------------------------------------+
//| XXX
//+------------------------------------------------------------------+
void XXX(string MasterName, string ProgramTrace, string Parameter)
  {
   string SlaveName="XXX";                               // Имя функции.
   ProgramTrace=ProgramTrace+"=>"+SlaveName;             // Путь обращения к функции.
   if( Parameter!="" ) ProgramTrace=ProgramTrace+"("+Parameter+")";
   string Message=ProgramTrace;                          // Функциональные сообщения.
   if( TraceIsAllowed ) Print(Message);                  // Задана трассировка программы .
//----
   
//----
   return;
  }
 
... Ist Mql die richtige Sprache für die Rückverfolgung!!!
 
tara:

Auch Fehler können verworfen werden.

:))

Das Problem (wenn Sie den ersten Beitrag gelesen haben) besteht darin, jeder Funktion im Quellcode nur eine Service-Funktion hinzuzufügen - direkt nach "{".

Aber so, dass man alle Passagen des Quellcodes erhält und einen Aufrufbaum erstellt.

Es ändert weder die Eingabeparameter der Quellfunktionen noch die Ergebnisse oder den Code innerhalb der


jartmailru:
... Ist Mql die richtige Sprache für die Rückverfolgung!!!

Es geht nicht um reine Spuren. Es geht nur darum, einen Funktionsgraphen zu konstruieren.
 
sergeev:
Es geht nicht um reine Spuren. Es geht nur um die Erstellung des Funktionsgraphen.
Statische Code-Analyse... Ein Vollzug ist nicht erforderlich.
Der Code wird in Funktionen (Blöcke) unterteilt und dann wird analysiert, wer wen aufruft.
 
jartmailru:
... Ist Mql die richtige Sprache für die Rückverfolgung!!!

Warum nicht, wenn Sie es wollen.

 
sergeev:

:))

Das Problem (wenn Sie den ersten Beitrag gelesen haben) besteht darin, jeder Funktion im Quellcode nur eine Service-Funktion hinzuzufügen - direkt nach "{".

Aber so, dass alle Quellcodepässe erhalten und der Aufrufbaum aufgebaut wird.

Ist es nicht offensichtlich, dass diese Aufgabe unlösbar ist? Auf diese Weise könnten wir Paare von arithmetischen () [] und Operator-Klammern {} eliminieren und sie durch eine einzige öffnende Klammer ersetzen. Wäre das so schlimm?

;)