MQL4 - automated forex trading   /  

Forum

Login | Register | Language: ru cn en
MetaTrader 5 for Android - Mobility With No Less Functionality

Debug for mq4

Back to topics list To post a new topic, please log in or register
avatar
61
Method of Determining Errors in Code by Commenting
The article describes a method of searching the errors in the MQL4 code that is based on commenting. This method is found to be a useful one in case of problems occuring during the compilation caused by the errors in a reasonably large code.
avatar
14179
RaptorUK 2012.10.12 17:20 #
 
jugivi:
Good afternoon, I wanted to know if there is some software that can do debug to mq4 program. Thank you.
Yes, Comment(), Print() & Alert() . . they are all you have.

avatar
61
jugivi 2012.10.12 17:23 #
 
Thanks, is what I'm using, but ...
avatar
10050
WHRoeder 2012.10.12 20:25 #
 
RaptorUK: Yes, Comment(), Print() & Alert() . . they are all you have.
  1. Which do not work under optimization. And DebugView which work always:
    /** Log
    * send information to OutputDebugString() to be viewed and logged by
    * SysInternal's DebugView (free download from microsoft) This is ideal for
    * debugging as an alternative to Print(). The function will take up to 10
    * stringa (or numeric) arguments to be concatenated into one debug message.
    //*/
    #import "kernel32.dll"
       void OutputDebugStringA(string msg);
    #import
    void Log(string s1,    string s2="", string s3="", string s4="", string s5="",
             string s6="", string s7="", string s8="", string s9="", string s10=""){
        if (IsDllsAllowed()){
            string out  = WindowExpertName() + ": "
                        + s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
            OutputDebugStringA(out);
        }
    }
    
  2. An in the tester/visual mode you can call PauseTest()
    /*                                          PauseTest
    // http://forum.mql4.com/35112
    // Each chart consists of two windows (i.e. two hWnds): the drawing area (WH,)
    // and a container (GA.) There is then a standard MDI container which holds all
    // the chart windows (GA1.) And that sits inside the main MT4 window (GA2.)
    */
    #include <WinUser32.mqh>
    #import "user32.dll"
      int GetAncestor(int, int);
    #import
    void PauseTest(){   datetime now = TimeCurrent();   static datetime oncePerTick;
        if( oncePerTick != now  )if( IsTesting()
        )if( IsVisualMode()     )if( IsDllsAllowed()    ){  oncePerTick = now;
            for(int i=0; i<200000; i++){        // Delay required for speed=32 (max)
                if (IsStopped()) break;         // http://forum.mql4.com/32837 WH-DL
                int main = GetAncestor(WindowHandle(Symbol(), Period()), 2);//GA_ROOT
                if (i==0) PostMessageA(main, WM_COMMAND, 0x57a, 0); // 1402. Pause
        }   }
        // The PostMessage above sends the command to the main terminal. Thus it
        // only affects the active chart window. To maximize a window for example
        // must activate it first. http://forum.mql4.com/35336#538848
        // See also SetForgroundWindow(h) https://www.mql5.com/en/code/10146
    }
    

Back to topics list  

To add comments, please log in or register