我正在使用的一些代码有一个奇怪的问题: 据我所知并且据我检查,代码中没有任何组件依赖于任何随机的东西,例如系统时间等。 然而,只需在代码中添加断点,程序的行为就会发生变化。它没有做任何错误,只是行为不同(在代码中通过某个值选择多个对象,所有这些对象都是 0 - 它只是在添加断点时选择一个值为 0 的不同对象) 。 不幸的是,不可能发布任何代码,因为代码太多了。
什么会导致这种行为?
编辑: 我在这个问题上花了更多时间:它似乎与断点本身无关 - 产生不同结果的“最简单”方法如下:当从项目的不同 .cpp 文件启动调试过程时,输出已经有所不同。禁用“自动构建”后,这种情况就不会再发生。我从中得出的结论是,即使代码没有变化,某些东西也会被重建。 我还将其范围缩小到实际导致不同行为的类:它是斐波那契堆的实现。
这是一个 gdb 错误。我已经在 gcc 上提交了申请 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117647),他们要求我转到 sourceware.org。 同时他们提到了两个相关问题https://sourceware.org/PR28999和https://sourceware.org/PR26325,但截至今天2024/11/18 gdb 15.2仍然没有解决这个问题。