你看过这个bug吗?世界上如何开始寻找它?

时间:2014-06-02 00:39:50

标签: ogre3d

我正在关注自己的事业,处理与着色器完全无关的代码,突然间我的Ogre3D应用程序在启动时崩溃。

如果我启动并选择DX9,则日志的最后几行是:

Hydrax Initialization
[Hydrax] Hydrax created.
[Hydrax] HydraxDemo.hdx loaded.

如果我启动并选择OpenGL,它会越过Hydrax,并在SkyX上崩溃:

GLSL compiling: SkyX_Skydome_VP_GLSL
GLSL compiled:
GLSL compiling: SkyX_Skydome_STARFIELD_LDR_FP_GLSL
GLSL compiled: Vertex Program:SkyX_Skydome_VP_GLSL Fragment Program:SkyX_Skydome_STARFIELD_LDR_FP_GLSL GLSL link result :

我尝试过这些事情没有成功: 1.恢复今天(无关)的源变化 2.重建整个系统 3.重启

它似乎在RenderSystem_GL.dll

中崩溃

我没有改变任何东西,但我得到了不同的结果。如何找出问题所在?

1 个答案:

答案 0 :(得分:1)

永远不要编码比调试...或类似的东西更快。我应该检讨调查过的所有途径,还是跳转到解决方案?如果您只是想要解决方案,请跳过它。

我提前两天做了一个完整的备份,所以我从备份驱动器运行了应用程序。它工作正常。代码或数据(或机器)中的某些东西已经改变,但是旧版本在同一台机器上运行良好,因此消除了Windows更新和硬件功能。

接下来,我尝试在新数据目录中运行旧应用程序,并且由于两个构建之间的数据结构不同而崩溃了。没有来自该测试的信息。

然后我尝试在旧数据源中运行新应用程序,并在上述相同位置崩溃。这表明错误在可执行文件中,即使我的编辑可能与着色器有关。

接下来我查看了* .DLL文件......所有42个文件。没有区别。

然后我看了四十个* .O文件。只有两个被改变了。三个源文件不同。我把原件重新放入,重建所有* .O文件,链接,并且它工作!!

解: 突然间,我不需要深入挖掘。我记得我对GUI的最后一次更改。我在2D叠加层上有额外的线条,我已经删除了不再需要的线条的构造函数。但是,我没有删除该行的相应定期更新。在系统尝试更新NULL指针之前,甚至没有显示一帧,并且CRASH !!

着色器恰好是崩溃前打印到日志的最后一个模块。错误不在DLL中 - 仅在我的源代码中,也在我的上一次编辑中。因为我知道我没有对着色器做任何事情,所以我更深入地思考着色器如何被我的任何一些小编辑打破。很难想象是什么原因导致它。通常这个错误是我做的最后一两件事,这也不是规则的例外。