请考虑以下代码:
档案C.jl
module C
export printLength
printLength = function(arr)
println(lentgh(arr))
end
end #module
File 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()
。 Julia绝对没有指出无效的代码片段 - 它只是指向main
的调用,但错误的行甚至不在该文件中!现在想象一个真正的项目,其中错误隐藏在调用堆栈中。朱莉娅仍然不会告诉任何事情,因为问题始于执行的切入点。这样的工作是不可能的......
有没有办法强迫朱莉娅提供更精确的消息?
答案 0 :(得分:3)
在这种情况下,它几乎可以肯定是内联的结果:你的printLength
函数非常短,几乎可以肯定地内联到调用站点,这就是你得到第8行的原因。
最终,预计内联不会导致回溯问题。目前,你最好的选择---如果你正在运行julia的预发布0.4版本---就是以julia --inline=no
开始julia并再次运行你的测试。