NetLogo levelspace与profiler扩展冲突问题求助
解决LevelSpace与Profiler扩展交互导致的字节码生成器错误
在NetLogo 6.3.0中同时使用LevelSpace和Profiler扩展时,调用ls:create-interactive-models后,即便执行ls:reset,启动Profiler仍会抛出"The profiler extension requires the NetLogo bytecode generator, which is currently turned off"错误。
问题根源
LevelSpace在创建交互式模型时,会将系统属性org.nlogo.noGenerator设置为true以关闭字节码生成器,而ls:reset仅清理LevelSpace创建的模型实例,不会恢复该系统属性的默认值(false)。Profiler扩展依赖字节码生成器实现性能分析,因此属性未恢复时会触发报错。
解决方案
方案一:手动恢复字节码生成器设置
通过Java反射调用修改系统属性,在启动Profiler前恢复字节码生成器:
extensions [ls profiler] to test ls:reset ls:create-interactive-models 1 "./MyRandomOtherModel.nlogo" ls:reset ; 恢复字节码生成器启用状态 let set-property (java:method "setProperty" "java.lang.System" ["java.lang.String" "java.lang.String"]) java:call set-property "org.nlogo.noGenerator" "false" profiler:start end
注意:此方法需要模型允许Java扩展(默认开启,若禁用则无法使用)。
方案二:调整执行顺序
若无需监控LevelSpace运行阶段的代码,可先启动Profiler,再执行LevelSpace相关操作:
extensions [ls profiler] to test profiler:start ls:reset ls:create-interactive-models 1 "./MyRandomOtherModel.nlogo" ls:reset profiler:stop profiler:show end
内容的提问来源于stack exchange,提问作者LeirsW
相关产品推荐
相关产品推荐

