我想查看一个函数的调用跟踪,即显示所有递归调用的子调用。
除了使用Profile
Profile.clear()
x = rand(3)
@profile for i in 1:10000 LinearAlgebra.norm(x) end
Profile.print()
10 ./task.jl:259; (::getfield(IJulia, Symbol("##12#15...
10 .../DL02A/src/eventloop.jl:8; eventloop(::ZMQ.Socket)
10 ./essentials.jl:696; invokelatest
10 ./essentials.jl:697; #invokelatest#1
10 ...rc/execute_request.jl:69; execute_request(::ZMQ.Socket, ::I...
10 ...c/SoftGlobalScope.jl:206; softscope_include_string(::Modul...
10 ./boot.jl:319; eval
10 ./In[20]:3; top-level scope
9 ...ofile/src/Profile.jl:25; macro expansion
9 ./In[20]:3; macro expansion
5 ...ebra/src/generic.jl:427; norm(::Array{Float64,1})
4 ...bra/src/generic.jl:429; norm(::Array{Float64,1}, ::In...
4 ...gebra/src/dense.jl:143; norm2(::Array{Float64,1})
1 ...ra/src/generic.jl:0; generic_norm2(::Array{Float6...
1 ...ra/src/generic.jl:299; generic_norm2(::Array{Float6...
1 ...ra/src/generic.jl:358; normInf
1 ...ra/src/generic.jl:274; generic_normInf
1 ...ra/src/generic.jl:303; generic_norm2(::Array{Float6...
1 ...ra/src/generic.jl:311; generic_norm2(::Array{Float6...
1 ./math.jl:493; sqrt
1 ...ofile/src/Profile.jl:27; macro expansion
1 ...file/src/Profile.jl:282; stop_timer
由于Profile
是基于时间采样的,因此我必须循环该函数,以便允许它收集足够的数据以显示。结果,在输出的顶部会有一些多余的信息,这些信息也会导致我真正关心的行被截断。
我需要的是:
5 ...ebra/src/generic.jl:427; norm(::Array{Float64,1})
4 ...bra/src/generic.jl:429; norm(::Array{Float64,1}, ::In...
4 ...gebra/src/dense.jl:143; norm2(::Array{Float64,1})
1 ...ra/src/generic.jl:0; generic_norm2(::Array{Float6...
1 ...ra/src/generic.jl:299; generic_norm2(::Array{Float6...
1 ...ra/src/generic.jl:358; normInf
1 ...ra/src/generic.jl:274; generic_normInf
1 ...ra/src/generic.jl:303; generic_norm2(::Array{Float6...
1 ...ra/src/generic.jl:311; generic_norm2(::Array{Float6...
1 ./math.jl:493; sqrt