エラー、バグ、質問 - ページ 2759 1...275227532754275527562757275827592760276127622763276427652766...3185 新しいコメント Sergey Dzyublik 2020.05.28 16:43 #27581 MT5デバッガ(ビルド2450)のバグで、手動で設定したブレークポイントが正しくトリガされない: void test(){ if(false){ int i = 1; // вручную установленная точка останова } } // место срабатывания точки останова при отладке void OnStart(){ test(); }UPD:批判をありがとう、元のプロジェクトに 戻り、コードの過度の最適化なしで発生した問題を強調した: class A{ public: bool m_flag; A* m_next; A(bool flag) : m_flag(flag){} void test(){ if(m_flag){ printf("1"); m_next = m_next; // Вручную установленная точка останова срабатывает как для false так и true условий //m_next = &this; // Ok } } }; void OnStart(){ {A a(false); a.test();} // Result: breakpoint Expected result: {A a(true); a.test();} // Result: printf + breakpoint Expected result: printf + breakpoint } Sergey Chalyshev 2020.05.28 16:46 #27582 Sergey Dzyublik: MT5デバッガ(ビルド2450)のバグで、手動で設定したブレークポイントが正しくトリガされない: なぜ、こんな苦労をしなければならないのか、説明してもらえますか? if(false) デバッガーを使っていますか? Sergey Dzyublik 2020.05.28 16:54 #27583 Sergey Chalyshev:なぜこのように捻じ曲げなければならないのか、説明していただけますか? デバッガは使っていますか? コードには条件が入力できないBAGが表示されていますが、それでもコード内の全く別の場所でブレークポイントが 発動します。 その他の質問は? TraSer 2020.05.28 17:28 #27584 オープニングサポートに以下のメッセージを書きました。 ロボットをネタにテスト。奇妙な結果が出た。表の下部がスクリーンショットにあります。10万ルーブルで取引していることを考えると、マイナス収支の-6049、ドローダウン17%というのは信じられないような気がします。確かに、このパラメータのセットをテストするチャートを 開くと、指定したドローダウンでプラス収支になる。アカウントは本物の75287(写真の通り)です。このようなプログラムの動作には、どのような理由があるのでしょうか? また、すべてのパラメータセットがこのように動作することも付け加えられます。 答えが出た。 残念ながら、このような問題はテクニカルサポートの範囲ではありません。 端末の開発者にお問い合わせください。 その理由は何でしょうか? TraSer 2020.05.28 17:32 #27585 Sergey Dzyublik: このコードでは、条件が入力できないBAGが表示されていますが、それでもコード内の全く別の場所でブレークポイントをトリガーしています。 その他の質問は? すべてが正しく思えるのです。プログラムはif(false)を無視し、コードで最も近い場所でトリガーをかける)。 Alexey Viktorov 2020.05.28 17:38 #27586 TraSer: すべて正しいようです。プログラムはif(false)を無視し、コードの最も近い場所でトリガーをかける)。 これはまったく正しくない。条件を満たしたときだけ停止する必要があるのに、停止が毎ティックに あると、その間、おかしくなってしまうので...。 Igor Makanu 2020.05.28 17:57 #27587 Sergey Dzyublik:他に質問はありますか? コンパイル時に if(false) 条件 {......} のテキストを捨てなかったのはなぜでしょうか? ブレークポイントは、MEが文字列や折り返しなどのVSワンダーをシフトできないため、残りのコードの最初のMEテキスト文字に表示されます。 MEはリアルタイムでコードを解析できない、せいぜい自動置換が利用できる程度 バグるにはバグるが Alexey Viktorov 2020.05.28 18:23 #27588 Igor Makanu: コンパイラがプロジェクトのコンパイル時に if(false) 条件 {...} のテキストを捨てなかったと考える根拠は何でしょうか? ブレークポイントは、MEが文字列、折り返し、その他のVSの不思議をシフトすることができないので、残りのコードの最初のMEテキスト文字にあった。 MEはリアルタイムでコードを解析できない、せいぜい自動置換が利用できる程度 が、バグならバグで仕方ない。 正常な状態でテストする必要があります。先日、こんなことがありました:コードを一歩一歩実行するとき if(desiredProfit > 0 && summProfit > desiredProfit) { CloseAllPosition(); DeleteAllPending(); openSeries = Should_I_open; return; } デバッガで、明示的な条件が満たされていない状態で、関数呼び出しは 実行されず、return; が実行されました。私は、曲がったブラケットの後にはもうコードがなく、 void OnTick() を終了する曲がったブラケットがもう一つあるだけなので、コンパイラは return を移動したと判断しました。 Igor Makanu 2020.05.28 18:31 #27589 Alexey Viktorov: これは、正常な状態でテストする必要があります。 そう、それこそ虚偽ではなく、みたいな。 int i=1; if(--i == 0)... 通常、コンパイラはコンパイル時にそのような条件を見ません。 Sergey Dzyublik 2020.05.28 19:12 #27590 批評をありがとうございます。元の原稿に 戻り、コードを最適化しすぎることなく、発生した問題を強調しました: class A{ public: bool m_flag; A* m_next; A(bool flag) : m_flag(flag){} void test(){ if(m_flag){ printf("1"); m_next = m_next; // Вручную установленная точка останова срабатывает как для false так и true условий //m_next = &this; // Ok } } }; void OnStart(){ {A a(false); a.test();} // Result: breakpoint Expected result: {A a(true); a.test();} // Result: printf + breakpoint Expected result: printf + breakpoint } 1...275227532754275527562757275827592760276127622763276427652766...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
UPD:
批判をありがとう、元のプロジェクトに 戻り、コードの過度の最適化なしで発生した問題を強調した:
MT5デバッガ(ビルド2450)のバグで、手動で設定したブレークポイントが正しくトリガされない:
なぜ、こんな苦労をしなければならないのか、説明してもらえますか?
デバッガーを使っていますか?なぜこのように捻じ曲げなければならないのか、説明していただけますか?
デバッガは使っていますか?コードには条件が入力できないBAGが表示されていますが、それでもコード内の全く別の場所でブレークポイントが 発動します。
その他の質問は?
オープニングサポートに以下のメッセージを書きました。
ロボットをネタにテスト。奇妙な結果が出た。表の下部がスクリーンショットにあります。10万ルーブルで取引していることを考えると、マイナス収支の-6049、ドローダウン17%というのは信じられないような気がします。確かに、このパラメータのセットをテストするチャートを 開くと、指定したドローダウンでプラス収支になる。アカウントは本物の75287(写真の通り)です。このようなプログラムの動作には、どのような理由があるのでしょうか?
また、すべてのパラメータセットがこのように動作することも付け加えられます。
答えが出た。
残念ながら、このような問題はテクニカルサポートの範囲ではありません。
端末の開発者にお問い合わせください。
その理由は何でしょうか?
このコードでは、条件が入力できないBAGが表示されていますが、それでもコード内の全く別の場所でブレークポイントをトリガーしています。
その他の質問は?
すべてが正しく思えるのです。プログラムはif(false)を無視し、コードで最も近い場所でトリガーをかける)。
すべて正しいようです。プログラムはif(false)を無視し、コードの最も近い場所でトリガーをかける)。
これはまったく正しくない。条件を満たしたときだけ停止する必要があるのに、停止が毎ティックに あると、その間、おかしくなってしまうので...。
他に質問はありますか?
コンパイル時に if(false) 条件 {......} のテキストを捨てなかったのはなぜでしょうか?
ブレークポイントは、MEが文字列や折り返しなどのVSワンダーをシフトできないため、残りのコードの最初のMEテキスト文字に表示されます。
MEはリアルタイムでコードを解析できない、せいぜい自動置換が利用できる程度
バグるにはバグるが
コンパイラがプロジェクトのコンパイル時に if(false) 条件 {...} のテキストを捨てなかったと考える根拠は何でしょうか?
ブレークポイントは、MEが文字列、折り返し、その他のVSの不思議をシフトすることができないので、残りのコードの最初のMEテキスト文字にあった。
MEはリアルタイムでコードを解析できない、せいぜい自動置換が利用できる程度
が、バグならバグで仕方ない。
正常な状態でテストする必要があります。先日、こんなことがありました:コードを一歩一歩実行するとき
デバッガで、明示的な条件が満たされていない状態で、関数呼び出しは 実行されず、return; が実行されました。私は、曲がったブラケットの後にはもうコードがなく、 void OnTick() を終了する曲がったブラケットがもう一つあるだけなので、コンパイラは return を移動したと判断しました。
これは、正常な状態でテストする必要があります。
そう、それこそ虚偽ではなく、みたいな。
通常、コンパイラはコンパイル時にそのような条件を見ません。