【发布时间】:2013-03-19 20:31:23
【问题描述】:
我正在使用的一些代码存在一个奇怪的问题: 据我所知,据我检查,代码中没有依赖任何随机的组件,例如系统时间等。 然而,只需在代码中添加一个断点并改变程序的行为就足够了。它没有做错任何事情,只是表现不同(在代码中要通过某个值选择几个对象,所有对象都为 0 - 它只是在添加断点时选择值为 0 的不同对象) . 不幸的是,无法发布任何代码,因为代码太多了。
什么可能导致这种行为?
编辑: 我在这个问题上花了更多时间:它似乎与断点本身无关 - 产生不同结果的“最简单”方法如下:从项目的不同 .cpp 文件启动调试过程时,输出已经不同了。当禁用“自动构建”时,这不再发生。我由此得出结论,即使代码没有变化,也会重建一些东西。 我还将范围缩小到实际导致不同行为的类:它是斐波那契堆的实现。
【问题讨论】:
-
完全莫名其妙的行为通常(通常?)意味着您的某些代码具有未定义的行为,但是如果没有代码查看,就无法猜测到底是什么或在哪里。不过,我不会忽略它——奇怪但无害的行为并不总是无害的。
-
是选择多个对象并以不同的顺序执行,还是选择多个对象之一并选择不同的对象。无论哪种方式,优化都是一个出色的候选者。
-
它应该是从众多中选择一个并选择另一个。优化已停用。
-
在调试器下运行与不在调试器下运行时,您是否看到了不同的行为?或者在调试器下运行与附加调试器之间的区别?
-
@StarPilot:我只尝试在调试器下运行。但我知道当从调试模式切换到运行模式以及打开优化时,行为也会发生变化,但是在尝试创建最简单的场景时,我将其缩小到在调试器(Eclipse 提供的调试器)中运行它并切换断点打开和关闭。
标签: c++ eclipse breakpoints