【发布时间】:2015-08-31 13:07:12
【问题描述】:
对于我们的最后一项任务,我和一个朋友正在用 c++ 创建一个 Raytracer。我们正在与 Github 和 cmake 合作。一切正常,直到我们实现了阴影和折射。这些在我朋友的电脑上工作正常,但在我的电脑上不行。阴影根本不起作用,折射上有很多黑点。另一个奇怪的事情是,主文件中的 std::couts 在执行后不会显示在终端中,但我肯定在处理正确的文件(在其中写入随机内容时仍然会出错)。
尝试了几乎所有方法,从再次克隆、通过 USB 复制文件和更新编译器。
由于我们正在使用浮点数,我认为这可能是浮点数不准确的结果,但我想这并不能解释丢失的打印... 真的不知道,代码的哪一部分会有所帮助,但我可以发布任何内容。他在 64 位上使用 Ubuntu 15.04,而我在同一台机器上使用 14.04。
希望有人能帮帮我!
编辑:好的,只是尝试从包含的文件中打印一些东西,工作得很好。但仍然没有从主文件中打印出来..
【问题讨论】:
-
如果您不知道要发布哪部分代码,那么您就不知道错误在哪里。这意味着你必须查明它。开始删除块(
#if 0,注释掉之类的东西),每次删除后进行测试,直到问题消失。然后你会更接近发现错误。 -
好吧,好像你有未定义的行为。尝试寻找未初始化的值、不安全的指针或一些错误的强制转换。尝试启用警告,它应该对您有所帮助。
-
而不是
cout << "output\n";试试cout << "ouput" << endl;endl 将刷新缓冲区,强制应用程序打印 -
尝试在两台计算机上禁用所有优化的情况下进行编译,因此在调试模式下...一些激进的优化有时会导致此类问题。您是否还在光线跟踪代码中使用带有硬编码种子的随机数生成器?也许不同的行为(不包括 cout)将来自计算机上的随机数序列不同......
-
为所有内容添加日志记录,并寻找第一个分歧的地方。回溯,看看为什么会有所不同。可能是不同的编译器版本(很可能)或只是“未定义的行为”和细微的差异,例如一台机器通过地址空间随机化加载数据/代码的位置。