考虑以下代码:
C.jl文件
module C
export printLength
printLength = function(arr)
println(lentgh(arr))
end
end #module
Main.jl文件
using C
main = function()
arr = Array(Int64, 4)
printLength(arr)
end
main()
让我们尝试执行它。
$ julia Main.jl
ERROR: lentgh not defined
in include at /usr/bin/../lib64/julia/sys.so
in process_options at /usr/bin/../lib64/julia/sys.so
in _start at /usr/bin/../lib64/julia/sys.so
while loading /home/grzes/julia_sucks/Main.jl, in expression starting on line 8
显然,它不会被编译,因为lentgh
它拼写错误。问题是我收到的消息。expression starting on line 8
很简单main()
。朱莉娅绝望地指出了无效的代码片段-它只是指向的调用main
,但错误行甚至不在该文件中!现在想象一个真实的项目,其中的错误实际上隐藏在调用堆栈的深处。除了问题从执行的入口点开始,Julia仍然不愿透露任何其他信息。那样做是不可能的...
有没有办法强迫朱莉娅讲一些更准确的信息?
在这种情况下,几乎可以肯定是内联的结果:您的printLength
函数是如此之短,几乎可以肯定地将其内联到调用站点中,这就是为什么要获得行号8的原因。
最终,预期内联不会导致回溯问题。目前,最好的选择是-如果您正在运行julia的预发行版本0.4--则启动julia,julia --inline=no
然后再次运行测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句