이미 디버그 정보를 기록하고 있습니다.
무한 루프를 볼 수 없습니다.
로그 파일에서 마지막으로 본 것은 start()의 마지막 줄에서 return()을 호출할 때입니다.
거기에서 start()는 다시 트리거되지 않습니다.
다른 것이어야 합니다.
나는 FileWrite(), FileFlush와 함께 내 자신의 PrintDebug() 함수 를 사용하고 있다는 것을 알고 있습니다.
디버그 정보를 인쇄하는 방법으로 충분하다고 생각하십니까?
이미 디버그 정보를 기록하고 있습니다.
무한 루프를 볼 수 없습니다.
로그 파일에서 마지막으로 본 것은 start()의 마지막 줄에서 return()을 호출할 때입니다.
거기에서 start()는 다시 트리거되지 않습니다.
다른 것이어야 합니다.
start() 의 첫 번째 줄로 로그에 무언가를 인쇄합니까?
예, 첫 번째 줄과 마지막 줄을 기록하고 있습니다.
내 로깅 방식이 로그 정보를 놓치지 않는다는 것을 확신할 수 있습니까?
내 로그 기능은 다음과 같습니다.
void PrintDebug( int F, string DebugStr1, string DS2 = "" , string DS3 = "" , string DS4 = "" , string DS5 = "" , string DS6 = "" , string DS7 = "" , string DS8 = "" , string DS9 = "" , string DS10 = "" , string DS11 = "" , string DS12 = "" , string DS13 = "" , string DS14 = "" , string DS15 = "" , string DS16 = "" , string DS17 = "" , string DS18 = "" , string DS19 = "" , string DS20 = "" ) { FileWrite (F, CommonIdentStr() + Blank + DebugStr1 + DS2 + DS3 + DS4 + DS5 + DS6 + DS7 + DS8 + DS9 + DS10 + DS11 + DS12 +DS13 + DS14 + DS15 + DS16 + DS17 + DS18 + DS19 + DS20); FileFlush (F); }
그리고 여기 내 시작 기능이 있습니다.
int start() { int TFInd; int k; if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart: " + "begin: " + " InitialGapFound: " + BoolToString(InitialGapFound); PrintDebug(DebugFile, DebugStr); } if (InitialGapFound) { if ( TimeLocal () >= LastInitialGapCloseCheck + HistoryDownloadCheckInterval) // zzz { LastInitialGapCloseCheck = TimeLocal (); if (InitialHistoryGapClosed()) { if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart: " + " InitialHistoryGapClosed " ; PrintDebug(DebugFile, DebugStr); } ReInit = true ; InitialGapFound = false ; MyInit(); } } if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart: " + " last return in InitialGapFound" ; PrintDebug(DebugFile, DebugStr); } return (OK); } // if InitialGapFound if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart (): last return: " ; PrintDebug(DebugFile, DebugStr); } return ( 0 ); }
시작과 끝을 기록하고 있습니다.
CheckDebug() 함수는 항상 true를 반환하므로 영향을 미치지 않습니다.
다음은 생성된 로그 파일입니다.
마지막 항목은 "DebugStart: last return in InitialGapFound"이며, 이는 start() 함수에서 실행된 마지막 명령문입니다.
로그 파일의 다음 항목 은 start() 함수의 첫 번째 명령문인 "DebugStart: begin: ..."이어야 합니다.
그러나 start()는 다시 트리거되지 않습니다. 대신 MT4는 루프에 멈춥니다.
내 프로그램 논리에서 루프를 볼 수 없습니다. 나는 DLL을 사용하지 않고 iCustom을 사용하지 않습니다.
2013.11.15 12:33:14 테스트 축소 0: USDJPY M15 디버그 초기화() 시작:
2013.11.15 12:33:14 테스트 축소 0: USDJPY M15 DebugMyInit 시작:
2013.11.15 12:33:14 테스트 축소 0: USDJPY M15 디버그 초기화() 반환:
2013.11.15 12:33:14 테스트 축소 0: USDJPY M15 DebugStart: 시작: InitialGapFound: True
2013.11.15 12:33:14 테스트 축소 0: USDJPY M15 DebugStart: InitialGapFound의 마지막 반환
2013.11.15 12:33:15 테스트 축소 395052: USDJPY M15 DebugStart: 시작: InitialGapFound: True
2013.11.15 12:33:15 테스트 축소 395052: USDJPY M15 DebugStart: InitialGapFound의 마지막 반환
2013.11.15 12:33:16 테스트 축소 395052: USDJPY M15 DebugStart: 시작: InitialGapFound: True
2013.11.15 12:33:16 테스트 축소 395052: USDJPY M15 DebugStart: InitialHistoryGapClosed
2013.11.15 12:33:16 테스트 축소 395052: USDJPY M15 DebugMyInit 시작:
2013.11.15 12:33:16 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 1 nach CreateHistory()
2013.11.15 12:33:17 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 2 nach CreateHistory()
2013.11.15 12:33:18 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 3 nach CreateHistory()
2013.11.15 12:33:19 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 4 nach CreateHistory()
2013.11.15 12:33:20 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 5 nach CreateHistory()
2013.11.15 12:33:21 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 6 nach CreateHistory()
2013.11.15 12:33:22 테스트 축소 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 7 nach CreateHistory()
2013.11.15 12:33:22 테스트 축소 395052: USDJPY M15 DebugMyInit 반환 InitialMyInitCalls: 0 IndexCount: 8
2013.11.15 12:33:22 테스트 축소 395052: USDJPY M15 DebugStart: InitialGapFound에서 마지막 반환
내 로그 기능은 다음과 같습니다.
그리고 여기 내 시작 기능이 있습니다.
시작과 끝을 기록하고 있습니다.
CheckDebug() 함수는 항상 true를 반환하므로 영향을 미치지 않습니다.
다음은 생성된 로그 파일입니다.
마지막 항목은 "DebugStart: last return in InitialGapFound"이며, 이는 start() 함수에서 실행된 마지막 명령문입니다.
로그 파일의 다음 항목은 start() 함수의 첫 번째 명령문인 "DebugStart: begin: ..."이어야 합니다.
그러나 start()는 다시 트리거되지 않습니다. 대신 MT4는 루프에 멈춥니다.
에서 OK는 무엇입니까? . .
return (OK);
디버깅이 문제를 일으키고 있다고 가정하고 start() 실행에서 변수 선언 후에 다음을 추가하고 위와 같이 로그와 로그 발췌문을 보여주는 보고서를 다시 보고하십시오. . .
int start() { int TFInd; int k; Print ( "start(): started . . ." ); // <----- add this line here if (CheckDebug(DebugStart, 2 ))
안녕,
나는 여기에서 추악한 문제에 직면하고 있습니다.
몇 번의 반복 후에 내 표시기의 start() 함수 는 return() 호출 후 다시 돌아오지 않습니다. 즉, MT4는 start()를 다시 호출하지 않고 루프에서 멈추고 CPU를 소모합니다.
어떻게 든 함수 호출 스택을 파괴했는지 궁금합니다.
내가 주로 원인을 찾아야 한다고 제안하는 것은 무엇입니까?
이미 일주일 내내 디버깅을 했습니다. 72페이지의 코드입니다.
DLL 호출을 사용하지 않고 MQL 평면만 사용합니다.
감사합니다.