报错内容
java.lang.NullPointerException: Cannot invoke "spinal.tester.SpinalSimTester.SimConfig()" because the return value of "spinal.tester.SpinalSimFunSuite.tester()" is null class FreeListSpec extends SpinalSimFunSuite { val simConfig = SimConfig.withWave
报错本质分析
这个java.lang.NullPointerException
的根本原因是:
写的是 val simConfig = SimConfig.withWave
,
但 SpinalSimFunSuite
里用到 SimConfig()
,而且 tester()
返回了 null,
结果就是想用 null 去调用 .SimConfig()
,触发了NPE。
代码实质上是在用一个未正确初始化的 tester,初始化顺序的问题。导致 simConfig 根本拿不到实例。
解决方案
- 把
val
改成 def
,写作 def simConfig = SimConfig.withWave
。
- 这样 simConfig 每次调用都会新生成一个实例,
而不是在测试类加载阶段就固定一个,也不会出现流程引用还没初始化的坑。
class XXXSpec extends SpinalSimFunSuite {
def simConfig = SimConfig.withWave
}
完