我正在用 C++/Qt 编写一个程序,其中包含一个图形文件解析器。我g++
用来编译项目。
在开发过程中,我不断比较我的低级解析器层在关于优化和调试信息的不同编译器标志之间的性能,以及 Qt 的调试标志(打开/关闭 qDebug() 和 Q_ASSERT())。
现在我面临一个问题,其中唯一正常运行的构建是没有任何优化的构建。所有其他版本,即使是-O1
,似乎也以另一种方式工作。它们由于不满足的断言而崩溃,在没有-O...
标志的情况下编译时满足。该代码不会产生任何编译器警告,即使使用-Wall
.
我很确定我的程序中有一个错误,这似乎只有在启用优化时才有害。问题是:即使在调试程序时我也找不到它。解析器似乎从文件中读取了错误的数据。当我运行一些简单的测试用例时,它们运行良好。当我运行更大的测试用例(直接从文件读取的图表上的路线计算)时,文件中的读取不正确,我无法解释。
我应该从哪里开始追踪这种未定义行为的问题?这种不同的行为可能涉及哪些优化方法?(我可以一个接一个地启用所有标志,但我不知道那么多编译器标志,但-O...
我知道它们有很多,所以这需要很长时间。)一旦我知道哪种类型这个错误是,我相信我迟早会找到它。
如果您能告诉我哪些编译器优化方法可能是此类问题的候选方法,您可以帮我很多。