Как не отображать трассировку вызова до глубины> n в виде дерева `Profile.print`? - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы видеть трассировку вызовов функции, то есть отображать все дочерние вызовы, вызванные рекурсивно.

Я не знаю простого способа, кроме использования 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
...