情景
当我打开关卡时,UE控制台
报错如下:
它很短,没有告诉我这个错误是哪行代码导致的,Visual Studio的输出
也没有说。
于是我通过文本搜索,找到了这行报错源自于Vector.h的第128行,函数DiagnosticCheckNaN()。NaN意思是not a num,某个地方使用了非法的数字运算。
但这块代码是灰色的,也就是说,IDE告诉我,UE Editor运行时并不会启用NaN检查。嗯,此时在第128行打断点是进不去的。(IDE是骗子)
于是我把ENABLE_NAN_DIAGNOSTIC
改为1,代码亮起来了,但依旧不能击中断点。
解决方案
2023.8.10更新
实习时的前辈闲的没事锐评我的文章
这行代码之所以断不进去,是因为它FORCEINLINE了,成为了内联函数
强制加check代码,让UE运行崩溃。
但因为Vector.h实在是太底层,这项修改会导致3000多个cpp的重新编译。
但是断点终于能断进去了。通过调用堆栈,可以看到是哪个地方做了非法运算。