추적 작업(함수 그래프 작성) - 페이지 4

 
이 템플릿을 사용했습니다.
 /*
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 :
이 템플릿을 사용했습니다.

그렇게 작지 않습니다.
 
sergeev :

또한 코드에 두 개의 블록이 있습니다. 처음과 끝에 ... 하지만 하나가 필요합니다.

결국 추적과 관련이 없습니다. 삭제할 수 있습니다.
 
tara :
결국 추적과 관련이 없습니다. 삭제할 수 있습니다.

네. 알겠어요. 그러나 여전히 ... 우리는 오류를 고려하지 않고 함수에 대한 각 입력을 고려합니다.
 
sergeev :

네. 알겠어요. 그러나 여전히 ... 우리는 오류를 고려하지 않고 함수에 대한 각 입력을 고려합니다.

실수도 버릴 수 있습니다.

 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 ;
  }
 
... 추적을 하는 것이 올바른 Mql 언어인가?!
 
tara :

실수도 버릴 수 있습니다.

:))

작업(첫 번째 게시물을 읽는 경우)은 "{" 바로 뒤에 소스 코드의 각 기능에 하나의 유틸리티 기능만 추가하는 것입니다.

그러나 소스 코드의 모든 패스를 가져오고 호출 트리를 구축하는 방식입니다.

동시에 원래 함수의 입력 매개변수도 결과도 내부 코드도


jartmailru :
... 추적을 하는 것이 올바른 Mql 언어인가?!

우리는 깨끗한 흔적에 대해 이야기하고 있지 않습니다. 그러나 함수의 그래프를 만드는 것에 대해서만.
 
sergeev :
우리는 깨끗한 흔적에 대해 이야기하고 있지 않습니다. 그러나 함수의 그래프를 만드는 것에 대해서만.
정적 코드 분석 ... 실행이 필요하지 않습니다.
코드는 기능(블록)으로 나뉩니다. 그런 다음 누가 누구를 호출하는지 분석됩니다.
 
jartmailru :
... 추적을 하는 것이 올바른 Mql 언어인가?!

왜 안 돼요.

 
sergeev :

:))

작업(첫 번째 게시물을 읽는 경우)은 "{" 바로 뒤에 소스 코드의 각 기능에 하나의 유틸리티 기능만 추가하는 것입니다.

그러나 소스 코드의 모든 패스를 가져오고 호출 트리를 구축하는 방식입니다.

문제는 해결할 수 없는 문제가 아닙니까? 이런 식으로 산술 () [] 및 연산자 {} 대괄호 쌍을 제거하고 이를 여는 유일한 대괄호로 대체할 수 있습니다. 약한?

;)