Julia中的编译器消息

时间:2015-05-14 12:29:58

标签: julia

请考虑以下代码:

档案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的调用,但错误的行甚至不在该文件中!现在想象一个真正的项目,其中错误隐藏在调用堆栈中。朱莉娅仍然不会告诉任何事情,因为问题始于执行的切入点。这样的工作是不可能的......

有没有办法强迫朱莉娅提供更精确的消息?

1 个答案:

答案 0 :(得分:3)

在这种情况下,它几乎可以肯定是内联的结果:你的printLength函数非常短,几乎可以肯定地内联到调用站点,这就是你得到第8行的原因。

最终,预计内联不会导致回溯问题。目前,你最好的选择---如果你正在运行julia的预发布0.4版本---就是以julia --inline=no开始julia并再次运行你的测试。

相关问题