0

我有一个网络程序,它涉及多个交互线程和一个用于重叠网络 I/O 的线程池。我正在使用 MinGW 进行编译,它是 Windows 的 gcc。

在没有编译器优化的情况下,它可以在几台不同的机器上运行 100%,但是当我打开优化时它会中断。

是否应该预期会发生这种情况,或者这是否揭示了我需要修复的错误?

4

1 回答 1

1

最可能的解释是它揭示了您需要修复的错误。这很可能是线程中的竞争条件,但也可能是混叠违规。

一个可以帮助您定位问题的技巧,尤其是在您轻松复制它的情况下,是进行二进制搜索以找到受影响的文件。基本上,编译一半的文件有优化,一半没有。查看代码是否有效或崩溃。这会将问题本地化到一半的代码。重复,缩小存在问题的文件,直到将其本地化为文件。如果需要,将该文件一分为二并将代码从一个文件移动到另一个文件,以找出在优化时失败的代码块,而不是在未优化时失败的代码块。

于 2012-04-19T09:14:39.803 回答