如何在Julia回溯中显示调用方?

如何在Julia回溯中显示调用方?,julia,Julia,有没有办法为Julia函数的调用者获取文件/名称/行信息 我找到了,如果调用方是另一个函数(但不是主上下文),我会得到文件:line info: module pd global g_bTraceOn = true export callerOfTraceIt function callerOfTraceIt() traceit( "hi" ) ; end function traceit( msg ) global g_bTraceO

有没有办法为Julia函数的调用者获取文件/名称/行信息

我找到了,如果调用方是另一个函数(但不是主上下文),我会得到文件:line info:

module pd

   global g_bTraceOn = true

   export callerOfTraceIt

   function callerOfTraceIt()
     traceit( "hi" ) ;
   end

   function traceit( msg )
      global g_bTraceOn

      if ( g_bTraceOn )
         bt = backtrace() ;
         s = sprint(io->Base.show_backtrace(io, bt))

         println( "debug: $s: $msg" )
      end
   end
end

using pd

callerOfTraceIt( )
这表明:

$ julia bt.jl
debug:
 in traceit at C:\cygwin64\home\Peeter\julia\HarmonicBalance\bt.jl:15
 in callerOfTraceIt at C:\cygwin64\home\Peeter\julia\HarmonicBalance\bt.jl:8
 in include at boot.jl:245
 in include_from_node1 at loading.jl:128
 in process_options at client.jl:285
 in _start at client.jl:354: hi

我只想要第二个帧(traceit()的调用者),如果可以的话,我还想要函数名。

如果你在
traceit
中做
,你会发现它只是一个指针列表,每个指针对应一个堆栈帧。来自julia代码(而非C)的堆栈帧通过
show\u backtrace
显示

您可以调用
Profile.lookup(uint(bt[1]))
从每个元素提取文件/函数/行信息:

julia> Profile.lookup(uint(bt[1]))
LineInfo("rec_backtrace","/home/tim/src/julia-old/usr/bin/../lib/libjulia.so",-1,true,140293228378757)

julia> names(Profile.LineInfo)
5-element Array{Symbol,1}:
 :func 
 :file 
 :line 
 :fromC
 :ip   

您可能希望忽略
fromC==true

的所有元素。下面是我如何使用这个:。。。我的一些第一个Julia代码,但类似的东西通常是我在一种新语言中的第一个代码。