错误、漏洞、问题 - 页 2759 1...275227532754275527562757275827592760276127622763276427652766...3184 新评论 Sergey Dzyublik 2020.05.28 16:43 #27581 MT5调试器(build 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调试器(build 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文本字符上,因为ME不能转移字符串、折叠和其他VS的奇迹 ME不能实时分析代码,最多是自动替代。 虽然这是一个错误,但它是一个错误。 Alexey Viktorov 2020.05.28 18:23 #27588 Igor Makanu: 你为什么认为编译器在编译项目时没有扔掉if(false)条件{....}的文本? 断点是在代码其余部分的第一个ME文本字符处,因为ME不能转移字符串、折叠和其他VS奇迹。 ME不能实时分析代码,最多是自动替代。 但如果它是一个错误,那就是一个错误。 你必须在正常条件下进行测试。有一天我得到了这个消息:当一步步执行代码时 if(desiredProfit > 0 && summProfit > desiredProfit) { CloseAllPosition(); DeleteAllPending(); openSeries = Should_I_open; 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...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
UPD:
谢谢你的批评,回到原来的项目,强调了遇到的问题,没有对代码进行过度优化:
MT5调试器(build 2450)中的错误,不正确地触发了手动设置的断点:
你能不能解释一下,为什么你要费尽心思?
你使用调试器吗?你能解释一下为什么我们要这样扭曲代码吗?
你使用调试吗?代码中显示了一个不能进入条件的BAG,但断点 仍然在代码中一个完全不同的地方触发。
还有问题吗?
写了以下信息给开放支持服务。
在一个故事上测试了机器人。得到了一些奇怪的结果。表格的底部部分在截图上。如果你考虑到我用10万卢布进行交易,-6049的负余额和17%的缩水似乎令人难以置信。的确,当我打开测试 这组参数的图表 时,我在指定的缩减量上得到了一个正的余额。该账户是真实的75287(如照片中所示)。程序的这种行为的原因可能是什么?
我还可以补充说,所有的参数集都是这样的行为。
得到了答案。
不幸的是,这类问题不属于技术支持的范围。
请联系该终端的开发者。
可能的原因是什么?
代码中显示了一个不能输入条件的BAG,但仍然在代码中一个完全不同的地方触发了一个断点。
还有问题吗?
在我看来,一切都很正确。程序忽略了if(false),并在离它最近的地方触发了代码)。
在我看来,一切都很正确。程序忽略了if(false)并在代码中最接近的地方触发)。
这一点也不正确。如果我需要在满足某个条件时才停止,而停止是在每一个刻度 上,我就会发疯,而...
还有什么问题吗?
你为什么认为编译器在编译项目时没有扔掉if(false)条件{....}的文本?
一个断点 出现在代码其余部分的第一个ME文本字符上,因为ME不能转移字符串、折叠和其他VS的奇迹
ME不能实时分析代码,最多是自动替代。
虽然这是一个错误,但它是一个错误。
你为什么认为编译器在编译项目时没有扔掉if(false)条件{....}的文本?
断点是在代码其余部分的第一个ME文本字符处,因为ME不能转移字符串、折叠和其他VS奇迹。
ME不能实时分析代码,最多是自动替代。
但如果它是一个错误,那就是一个错误。
你必须在正常条件下进行测试。有一天我得到了这个消息:当一步步执行代码时
在调试器中,在一个明确的条件没有被满足的情况下,函数调用 没有被执行,但返回;是。我决定,由于在弧形括号之后没有更多的代码,而且只有一个弧形括号终止了void OnTick(),编译器已经将return
这应该在正常情况下进行测试。
是的,这就是我所说的,不是假的,而是类似的东西。
通常,编译器在编译时不会看到这样的条件。