time of [Bench1()] = 1483377100000000
time of [Bench2()] = 1725035100000000
time of [Bench1()] = 1523441100000000
time of [Bench2()] = 1712777100000000
time of [Bench1()] = 1416779100000000
time of [Bench2()] = 1452093100000000
time of [Bench1()] = 1399366100000000
time of [Bench2()] = 1449939
내 프로젝트 중 하나의 디버거가 작동을 거부합니다. 게다가 그 행동은 예측하기 어렵다. 때로는 중단점에 도달하는 것을 거부합니다. 또한 일부 기능의 진입을 전혀 거부합니다. 처음에는 그 이유가 업데이트라고 생각했습니다(갑자기 디버깅에 문제가 발생했습니다). 그러나 다른 간단한 프로그램에서는 모든 것이 작동하는 것처럼 보입니다. 메인 프로젝트를 진행 중이기 때문에 자세히 확인하지는 못했지만. 그것은 꽤 복잡한 것으로 판명되었으며 내 디자인의 15개 모듈만 포함합니다(표준 모듈의 수는 계산하지 않았습니다). 기본 모듈에는 최대 2000줄이 포함됩니다. 프로젝트의 복잡성 때문이 아닐까 생각합니다... 또한, 반복적인 코드 조각에 매크로를 사용하는 곳도 있습니다. 또한 CAppDialog, CCheckGroup, CComboBox, CButton 등과 같은 표준 UI 요소를 사용합니다. 이 요소는 내 프로그램의 기능을 위해 다시 작성했습니다. 아마도 디버깅이 작동하지 않기 때문일 것입니다. 예를 들어, 내가 특별히 작성한 CCheckGroup::itemCheckState(const string item) 메서드에 디버깅이 입력되지 않습니다. 이 메서드는 확인란 요소를 찾고 선택되었는지 확인합니다(상태).
다음은 내가 만든 UI입니다.
일부 UI 요소는 일시적으로 분류됩니다. 그리고 여기 CAppDialog 요소의 Show() 및 Hide() 메서드를 재정의하는 방법에 대해 이야기하는 스레드가 있습니다. https://www.mql5.com/ru/forum/338301 . 그런 다음 컴파일러는 치명적인 오류가 있다고 맹세했습니다.
결과적으로 프로젝트가 정상적으로 컴파일되고 컴파일러에서 오류가 발생하지 않는 것으로 나타났습니다. 그러나 디버깅은 버그가 있으며 일부 코드 조각, 함수, 메서드 등의 실행을 표시하지 않습니다.
내가 이해하는 한 여러 가지 이유가 있을 수 있습니다.
복잡한 프로젝트 코드, 매크로 사용
CAppDialog, CCheckGroup, CComboBox, CButton과 같은 표준 UI 요소를 사용하여 코드를 복잡하게 만들기
안녕하세요! 다음 메시지가 MT5 로그에 나타납니다. 2020.05.21 05:49:44.364 Virtual Hosting이 가상 호스트 목록을 가져오지 못했습니다(www.mql5.com:443 send request failed [12002]).
좋은 사람들이여, 이것이 의미하는 바는 무엇이며 어떻게 해야 합니까?
고맙습니다!
내 프로젝트 중 하나의 디버거가 작동을 거부합니다. 게다가 그 행동은 예측하기 어렵다. 때로는 중단점에 도달하는 것을 거부합니다. 또한 일부 기능의 진입을 전혀 거부합니다. 처음에는 그 이유가 업데이트라고 생각했습니다(갑자기 디버깅에 문제가 발생했습니다). 그러나 다른 간단한 프로그램에서는 모든 것이 작동하는 것처럼 보입니다. 메인 프로젝트를 진행 중이기 때문에 자세히 확인하지는 못했지만. 그것은 꽤 복잡한 것으로 판명되었으며 내 디자인의 15개 모듈만 포함합니다(표준 모듈의 수는 계산하지 않았습니다). 기본 모듈에는 최대 2000줄이 포함됩니다. 프로젝트의 복잡성 때문이 아닐까 생각합니다... 또한, 반복적인 코드 조각에 매크로를 사용하는 곳도 있습니다. 또한 CAppDialog, CCheckGroup, CComboBox, CButton 등과 같은 표준 UI 요소를 사용합니다. 이 요소는 내 프로그램의 기능을 위해 다시 작성했습니다. 아마도 디버깅이 작동하지 않기 때문일 것입니다. 예를 들어, 내가 특별히 작성한 CCheckGroup::itemCheckState(const string item) 메서드에 디버깅이 입력되지 않습니다. 이 메서드는 확인란 요소를 찾고 선택되었는지 확인합니다(상태).
다음은 내가 만든 UI입니다.
일부 UI 요소는 일시적으로 분류됩니다. 그리고 여기 CAppDialog 요소의 Show() 및 Hide() 메서드를 재정의하는 방법에 대해 이야기하는 스레드가 있습니다. https://www.mql5.com/ru/forum/338301 . 그런 다음 컴파일러는 치명적인 오류가 있다고 맹세했습니다.
결과적으로 프로젝트가 정상적으로 컴파일되고 컴파일러에서 오류가 발생하지 않는 것으로 나타났습니다. 그러나 디버깅은 버그가 있으며 일부 코드 조각, 함수, 메서드 등의 실행을 표시하지 않습니다.
내가 이해하는 한 여러 가지 이유가 있을 수 있습니다.
빌드 및 시스템 정보:
https://www.mql5.com/ru/forum/1111/page2746#comment_16481481
CCheckGroup::itemCheckState 메서드(디버거에서 접근할 수 없음)에서 다음과 같이 작성했습니다.
그리고 다음과 같은 메시지를 받았습니다.
2020.05.21 13:20:44.229 CCheckGroup::itemCheckState 항목: 39 상태: 32
https://www.mql5.com/ru/forum/1111/page2746#comment_16481481
디버거의 정상적인 작업이 없으면 프로젝트 작업이 오랫동안 지연될 수 있습니다. 개발자들이 이 버그에 주의를 기울였으면 합니다. 아마도 디버거와 관련이 있을 것입니다.
글이 많아서 다 읽지 못했습니다.
그러나 디버그 버전에서는 작동하지만 릴리스 버전에서는 작동하지 않거나 그 반대의 경우에는 특히 클래스/구조의 모든 변수와 필드가 초기화되었는지 확인하십시오.
#define GETCURRENTTICK GetCurrentTick1(Tick)
#define GETCURRENTTICK GetCurrentTick2(Tick, !i)
#define GETCURRENTTICK GetCurrentTick3(Tick)
무료 SymbolInfo - 기능 주제에 대해.
아마도 메서드가 인라인된 경우 이것은 디버거의 문제가 아니라 디버그 모드용 컴파일러의 문제입니다.
거의, 프로젝트 는 내 것과 표준 모듈 모두에서 위아래로 매크로로 가득 차 있는 것으로 나타났습니다. 아마도 이것이 디버거가 *.ex5 디버그 파일의 명령을 *.mq5 소스 파일 및 기타 모듈의 행과 항상 일치시킬 수 없는 이유일 것입니다...
무료 SymbolInfo 기능에 대한 주제입니다.
따라서 이것은 함수 자체의 비용이며 참조가 아닌 값으로 문자열을 전달하지 않습니다!
더욱이 이 기능의 실행이 어드바이저 실행 시간의 상당 부분을 차지하는 경우 캐시 옵션이 상당한 솔루션입니다(나는 거의 믿지 않음).
거의, 프로젝트는 내 것과 표준 모듈 모두에서 위아래로 매크로로 가득 차 있는 것으로 나타났습니다. 아마도 이것이 디버거가 *.ex5 디버그 파일의 명령을 *.mq5 소스 파일 및 기타 모듈의 행과 항상 일치시킬 수 없는 이유일 것입니다...
따라서 이것은 함수 자체의 비용이며 참조가 아닌 값으로 문자열을 전달하지 않습니다!
처음에는 이것으로 이어졌습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
fxsaber , 2020.05.20 13:24
물론 있으면 더 좋습니다.
옵티마이저에서는 이러한 기능을 수십억 번 호출합니다.
더욱이 이 기능의 실행이 어드바이저 실행 시간의 상당 부분을 차지하는 경우 캐시 옵션이 상당한 솔루션입니다(나는 거의 믿지 않음).
어느 단계에서는 차지하는 시간의 상대적인 부분뿐만 아니라 절대적인 부분도 중요해진다.