添加断点会更改程序行为

时间:2013-03-19 20:31:23

标签: c++ eclipse breakpoints

我正在使用的一些代码存在一个奇怪的问题: 据我所知,据我所知,代码中没有组件,它依赖于任何随机的,如系统时间等。 然而,仅在代码中添加断点并且程序的行为发生变化就足够了。它没有做任何错误,它只是表现不同(在代码中有几个对象要通过某个值选择,对于所有这些对象都是0 - 它只是选择一个不同的对象,其中在添加断点时值为0) 。 不幸的是,发布任何代码是不可能的,因为它有太多的代码。

什么可能导致这种行为?

编辑: 我花了一些时间来解决这个问题:它似乎与断点本身无关 - 产生不同结果的“最简单”方法如下:从项目的另一个.cpp文件启动调试过程时输出已经变化了。当禁用“自动构建”时,这不再发生。我的结论是,即使代码没有变化,也会重建一些东西。 我还将它缩小到实际导致不同行为的类:它是斐波那契堆的实现。

1 个答案:

答案 0 :(得分:0)

如果您未在Windows上运行,请考虑使用Valgrind - these are the supported platformsMemcheck工具将运行您的程序(较慢),查看每个内存引用以跟踪未初始化变量的使用。

Memcheck可以检测您的程序:

  • 访问不应该的内存(尚未分配的区域,已释放的区域,堆块末尾的区域,堆栈的不可访问区域)。
  • 以危险的方式使用未初始化的值。
  • 泄漏记忆。
  • 糟糕的堆块释放(双重释放,不匹配的释放)。
  • 将重叠的源和目标内存块传递给memcpy()和相关函数。