当调用了某函数后,没有反应,应该如何排查?

写了一个函数,发现一直在运行。
于是插入了很多println()
结果发现,直到调用此函数之前,println()都能运行。可是被调用函数内部第一行println()却没有执行。

比如:

function main(...)
    ...
    println("完成径向工作点计算")
    ψJ = getψJ(nJ, nθ, zJθ, δJθ, funψzδ)
    println("完成径向密度计算; 开始计算angle variable")
    ϕJθ = getϕOfZE(zJθ, zMaxs, Js, funJ2E, [minBucketBound, maxBucketBound], nθ, par; ΔJ=ΔJ)
    ...
end

function getϕOfZE(zJθ::Matrix, zmaxs::Vector, Js::Vector, funJ2E, BucketBounds, ncircle::Int64, par::ParDBRF; ΔJ=1e-9)
    println("00")
    ...
end

输出:

完成径向工作点计算
完成径向密度计算; 开始计算angle variable

任务管理器显示Julia一直在占用CPU。


过了得40分钟吧,被调用的程序终于运行了。不过这也太慢了。是编译的问题吗?

遇到过一些情况,println 直到运行结束才一口气打印出来,这种情况加一行 flush(stdout) 就行了。不知道是不是你要问的问题。

2 个赞

我也怀疑过是这样。

不过我后面改了下函数,让它处理的内容更简单,就没这个问题了。

可以考虑将输出导向 stderr 或使用 @info 等宏,不太清楚能否完全解决问题