栈跟踪

Base.StackTraces.StackFrame类型
StackFrame

表示执行上下文的栈信息,包含以下字段

  • func::Symbol

    包含执行上下文的函数名称。

  • linfo::Union{Core.MethodInstance, Method, Module, Core.CodeInfo, Nothing}

    包含执行上下文的 MethodInstance 或 CodeInfo(如果能找到),或者 Module(用于宏扩展)"

  • file::Symbol

    包含执行上下文的的文件路径。

  • line::Int

    包含执行上下文的行号。

  • from_c::Bool

    如果代码来自 C,则为真。

  • inlined::Bool

    如果代码来自内联帧,则为真。

  • pointer::UInt64

    backtrace 返回的执行上下文指针的表示形式。

源代码
Base.StackTraces.stacktrace函数
stacktrace([trace::Vector{Ptr{Cvoid}},] [c_funcs::Bool=false]) -> StackTrace

StackFrame 向量形式返回栈跟踪。(默认情况下,stacktrace 不返回 C 函数,但可以启用。)在不指定跟踪的情况下调用时,stacktrace 首先调用 backtrace

源代码

Base.StackTraces 中的以下方法和类型未导出,需要例如以 StackTraces.lookup(ptr) 的方式调用。

Base.StackTraces.lookup函数
lookup(pointer::Ptr{Cvoid}) -> Vector{StackFrame}

给定指向执行上下文的指针(通常由对 backtrace 的调用生成),查找栈帧上下文信息。返回该点所有内联函数的帧信息数组,最内层函数优先。

源代码
Base.StackTraces.remove_frames!函数
remove_frames!(stack::StackTrace, name::Symbol)

获取一个 StackTraceStackFrames 的向量)和一个函数名称(一个 Symbol),并从 StackTrace 中删除由函数名称指定的 StackFrame(也删除指定函数以上的所有帧)。主要用于在返回 StackTrace 之前从 StackTrace 中删除 StackTraces 函数。

源代码
remove_frames!(stack::StackTrace, m::Module)

返回删除了来自提供的 Module 的所有 StackFrameStackTrace

源代码